' ------------------------------------------------------------------------
'
'    WIN32API.TXT -- Declaraciones de la API Win32 para Visual Basic
'
'              Copyright (C) 1994-98 Microsoft Corporation
'
'  Este archivo es necesario para la aplicacin Visor API de la versin 6.0 de
'  Visual Basic. Las versiones anteriores de este archivo podran no trabajar
'  correctamente con la versin 6.0 del Visor API. Este archivo es compatible
'  hacia atrs con versiones anteriores del Visor API, con la excepcin de que
'  las constantes no estn como Global o Public en este archivo.
'
'  Este archivo contiene slo las instrucciones Const, Type 
'  y Declare para las API de Win32.
'
'  Tiene derecho exento de patente para usar, modificar, reproducir y distribuir 
'  este archivo (o cualquier versin modificada) en la forma que desee,
'  a condicin de que acepte que Microsoft no ofrece garantas, obligaciones 
'  ni responsabilidad por su contenido. Para obtener ms informacin, consulte 
'  la Referencia del programador de Microsoft Windows.
'
' ------------------------------------------------------------------------

' Definiciones de tipos para los tipos bsicos de Windows.
Const ANYSIZE_ARRAY = 1
Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Type RECTL
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Type POINTAPI
        x As Long
        y As Long
End Type

Type POINTL
        x As Long
        y As Long
End Type

Type Size
        cx As Long
        cy As Long
End Type

Type POINTS
        x  As Integer
        y  As Integer
End Type

Type MSG
    hwnd As Long
    message As Long
    wParam As Long
    lParam As Long
    time As Long
    pt As POINTAPI
End Type


Const DELETE = &H10000
Const READ_CONTROL = &H20000
Const WRITE_DAC = &H40000
Const WRITE_OWNER = &H80000
Const SYNCHRONIZE = &H100000


Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const STANDARD_RIGHTS_ALL = &H1F0000

Const SPECIFIC_RIGHTS_ALL = &HFFFF


Type SID_IDENTIFIER_AUTHORITY
        Value(6) As Byte
End Type

Const SID_REVISION = (1)                         '  Nivel de revisin actual
Const SID_MAX_SUB_AUTHORITIES = (15)
Const SID_RECOMMENDED_SUB_AUTHORITIES = (1)	' Cambiar a alrededor de 6 en una prxima versin.

Const SidTypeUser = 1
Const SidTypeGroup = 2
Const SidTypeDomain = 3
Const SidTypeAlias = 4
Const SidTypeWellKnownGroup = 5
Const SidTypeDeletedAccount = 6
Const SidTypeInvalid = 7
Const SidTypeUnknown = 8

Type SID_AND_ATTRIBUTES
        Sid As Long
        Attributes As Long
End Type

' ///////////////////////////////////////////////////////////////////////////
'                                                                          //
'  SID conocidos universales                                               //
'                                                                          //
'      SID nulo              		S-1-0-0                                //
'      Mundial                 	S-1-1-0                                //
'      Local                 		S-1-2-0                                //
'      Id. del propietario creador  S-1-3-0                                //
'      Id. del grupo creador      	S-1-3-1                                //
'                                                                          //
'      (Id. no exclusivos)      	S-1-4                                  //
'                                                                          //
' ///////////////////////////////////////////////////////////////////////////
Const SECURITY_NULL_RID = &H0
Const SECURITY_WORLD_RID = &H0
Const SECURITY_LOCAL_RID = &H0

Const SECURITY_CREATOR_OWNER_RID = &H0
Const SECURITY_CREATOR_GROUP_RID = &H1


' ///////////////////////////////////////////////////////////////////////////
'                                                                          //
'  SID conocidos en NT                                                     //
'                                                                          //
'      Autoridad NT          		S-1-5                                  //
'      Marcar                		S-1-5-1                                //
'                                                                          //
'      Red               		S-1-5-2                                //
'      Procesamiento por lotes	S-1-5-3                                //
'      Interactivo           		S-1-5-4                                //
'      Servicio             		S-1-5-6                                //
'      Conexin annima        	S-1-5-7 (sesin de conexin aka null)  //
'                                                                          //
'      (Id. de conexiones)          S-1-5-5-X-Y                            //
'                                                                          //
'      (Id. no exclusivos de NT)   	S-1-5-0x15-...                         //
'                                                                          //
'      (Dominio integrado)     	S-1-5-0x20                             //
'                                                                          //
' ///////////////////////////////////////////////////////////////////////////

Const SECURITY_DIALUP_RID = &H1
Const SECURITY_NETWORK_RID = &H2
Const SECURITY_BATCH_RID = &H3
Const SECURITY_INTERACTIVE_RID = &H4
Const SECURITY_SERVICE_RID = &H6
Const SECURITY_ANONYMOUS_LOGON_RID = &H7
Const SECURITY_LOGON_IDS_RID = &H5
Const SECURITY_LOCAL_SYSTEM_RID = &H12
Const SECURITY_NT_NON_UNIQUE = &H15
Const SECURITY_BUILTIN_DOMAIN_RID = &H20


' ///////////////////////////////////////////////////////////////////////////
'                                                                          //
'  valores de subautoridad relativa (RID) de dominio conocido...           //
'                                                                          //
' ///////////////////////////////////////////////////////////////////////////

Const DOMAIN_USER_RID_ADMIN = &H1F4
Const DOMAIN_USER_RID_GUEST = &H1F5

Const DOMAIN_GROUP_RID_ADMINS = &H200
Const DOMAIN_GROUP_RID_USERS = &H201
Const DOMAIN_GROUP_RID_GUESTS = &H202


Const DOMAIN_ALIAS_RID_ADMINS = &H220
Const DOMAIN_ALIAS_RID_USERS = &H221
Const DOMAIN_ALIAS_RID_GUESTS = &H222
Const DOMAIN_ALIAS_RID_POWER_USERS = &H223
Const DOMAIN_ALIAS_RID_ACCOUNT_OPS = &H224
Const DOMAIN_ALIAS_RID_SYSTEM_OPS = &H225
Const DOMAIN_ALIAS_RID_PRINT_OPS = &H226
Const DOMAIN_ALIAS_RID_BACKUP_OPS = &H227
Const DOMAIN_ALIAS_RID_REPLICATOR = &H228


'  Asignan Luid del sistema. Los 1000 primeros LUID estn reservados.
'  Use #999 aqu0x3E7 = 999)

'  end_ntifs

' //////////////////////////////////////////////////////////////////////
'                                                                     //
'                     Atributos SID relacionados con user y grupo     //
'                                                                     //
' //////////////////////////////////////////////////////////////////////

'  Atributos de grupo

Const SE_GROUP_MANDATORY = &H1
Const SE_GROUP_ENABLED_BY_DEFAULT = &H2
Const SE_GROUP_ENABLED = &H4
Const SE_GROUP_OWNER = &H8
Const SE_GROUP_LOGON_ID = &HC0000000

'  Atributos de user

'  (Sin definir an.)

' ------------------
'  Seccin de kernel
' ------------------

Const FILE_BEGIN = 0
Const FILE_CURRENT = 1
Const FILE_END = 2

Const FILE_FLAG_WRITE_THROUGH = &H80000000
Const FILE_FLAG_OVERLAPPED = &H40000000
Const FILE_FLAG_NO_BUFFERING = &H20000000
Const FILE_FLAG_RANDOM_ACCESS = &H10000000
Const FILE_FLAG_SEQUENTIAL_SCAN = &H8000000
Const FILE_FLAG_DELETE_ON_CLOSE = &H4000000
Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000
Const FILE_FLAG_POSIX_SEMANTICS = &H1000000

Const CREATE_NEW = 1
Const CREATE_ALWAYS = 2
Const OPEN_EXISTING = 3
Const OPEN_ALWAYS = 4
Const TRUNCATE_EXISTING = 5

' Definen los valores dwOpenMode para CreateNamedPipe
Const PIPE_ACCESS_INBOUND = &H1
Const PIPE_ACCESS_OUTBOUND = &H2
Const PIPE_ACCESS_DUPLEX = &H3

' Definen los indicadores de fin de canalizaciones con nombre para GetNamedPipeInfo
Const PIPE_CLIENT_END = &H0
Const PIPE_SERVER_END = &H1

' Definen los valores de dwPipeMode para CreateNamedPipe
Const PIPE_WAIT = &H0
Const PIPE_NOWAIT = &H1
Const PIPE_READMODE_BYTE = &H0
Const PIPE_READMODE_MESSAGE = &H2
Const PIPE_TYPE_BYTE = &H0
Const PIPE_TYPE_MESSAGE = &H4

' Definen los valores conocidos para CreateNamedPipe nMaxInstances
Const PIPE_UNLIMITED_INSTANCES = 255

' Definen los bits de calidad de seguridad de servicio que se transfieren
'  a CreateFile
Const SECURITY_CONTEXT_TRACKING = &H40000
Const SECURITY_EFFECTIVE_ONLY = &H80000

Const SECURITY_SQOS_PRESENT = &H100000
Const SECURITY_VALID_SQOS_FLAGS = &H1F0000

Type OVERLAPPED
        Internal As Long
        InternalHigh As Long
        offset As Long
        OffsetHigh As Long
        hEvent As Long
End Type

Type SECURITY_ATTRIBUTES
        nLength As Long
        lpSecurityDescriptor As Long
        bInheritHandle As Long 
End Type

Type PROCESS_INFORMATION
        hProcess As Long
        hThread As Long
        dwProcessId As Long
        dwThreadId As Long
End Type

Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
End Type

Type SYSTEMTIME
        wYear As Integer
        wMonth As Integer
        wDayOfWeek As Integer
        wDay As Integer
        wHour As Integer
        wMinute As Integer
        wSecond As Integer
        wMilliseconds As Integer
End Type

'  Tipo de proveedor del puerto serie.
Const SP_SERIALCOMM = &H1&

'  Subtipos de proveedor.
Const PST_UNSPECIFIED = &H0&
Const PST_RS232 = &H1&
Const PST_PARALLELPORT = &H2&
Const PST_RS422 = &H3&
Const PST_RS423 = &H4&
Const PST_RS449 = &H5&
Const PST_FAX = &H21&
Const PST_SCANNER = &H22&
Const PST_NETWORK_BRIDGE = &H100&
Const PST_LAT = &H101&
Const PST_TCPIP_TELNET = &H102&
Const PST_X25 = &H103&

'  Indicadores de capacidades del proveedor.
Const PCF_DTRDSR = &H1&
Const PCF_RTSCTS = &H2&
Const PCF_RLSD = &H4&
Const PCF_PARITY_CHECK = &H8&
Const PCF_XONXOFF = &H10&
Const PCF_SETXCHAR = &H20&
Const PCF_TOTALTIMEOUTS = &H40&
Const PCF_INTTIMEOUTS = &H80&
Const PCF_SPECIALCHARS = &H100&
Const PCF_16BITMODE = &H200&

'  Parmetros configurables del proveedor de comunicaciones.
Const SP_PARITY = &H1&
Const SP_BAUD = &H2&
Const SP_DATABITS = &H4&
Const SP_STOPBITS = &H8&
Const SP_HANDSHAKING = &H10&
Const SP_PARITY_CHECK = &H20&
Const SP_RLSD = &H40&

'  Velocidades en baudios configurables en el proveedor.
Const BAUD_075 = &H1&
Const BAUD_110 = &H2&
Const BAUD_134_5 = &H4&
Const BAUD_150 = &H8&
Const BAUD_300 = &H10&
Const BAUD_600 = &H20&
Const BAUD_1200 = &H40&
Const BAUD_1800 = &H80&
Const BAUD_2400 = &H100&
Const BAUD_4800 = &H200&
Const BAUD_7200 = &H400&
Const BAUD_9600 = &H800&
Const BAUD_14400 = &H1000&
Const BAUD_19200 = &H2000&
Const BAUD_38400 = &H4000&
Const BAUD_56K = &H8000&
Const BAUD_128K = &H10000
Const BAUD_115200 = &H20000
Const BAUD_57600 = &H40000
Const BAUD_USER = &H10000000

'  Bits de datos configurables.
Const DATABITS_5 = &H1&
Const DATABITS_6 = &H2&
Const DATABITS_7 = &H4&
Const DATABITS_8 = &H8&
Const DATABITS_16 = &H10&
Const DATABITS_16X = &H20&

'  Bits configurables de paro y de paridad.
Const STOPBITS_10 = &H1&
Const STOPBITS_15 = &H2&
Const STOPBITS_20 = &H4&
Const PARITY_NONE = &H100&
Const PARITY_ODD = &H200&
Const PARITY_EVEN = &H400&
Const PARITY_MARK = &H800&
Const PARITY_SPACE = &H1000&

Type COMMPROP
        wPacketLength As Integer
        wPacketVersion As Integer
        dwServiceMask As Long
        dwReserved1 As Long
        dwMaxTxQueue As Long
        dwMaxRxQueue As Long
        dwMaxBaud As Long
        dwProvSubType As Long
        dwProvCapabilities As Long
        dwSettableParams As Long
        dwSettableBaud As Long
        wSettableData As Integer
        wSettableStopParity As Integer
        dwCurrentTxQueue As Long
        dwCurrentRxQueue As Long
        dwProvSpec1 As Long
        dwProvSpec2 As Long
        wcProvChar(1) As Integer
End Type

'Type COMSTAT
'        fCtsHold As Long
'        fDsrHold As Long
'        fRlsdHold As Long
'        fXoffHold As Long
'        fXoffSent As Long
'        fEof As Long
'        fTxim As Long
'        fReserved As Long
'        cbInQue As Long
'        cbOutQue As Long
'End Type

Type COMSTAT
        fBitFields As Long 'Vea el comentario en Win32API.Txt
        cbInQue As Long
        cbOutQue As Long
End Type
' Los ocho campos de datos reales con tamao de bit COMSTAT dentro de los cuatro bytes de 
' fBitFields pueden manipularse mediante operaciones lgicas de bits And/Or.
' Campo         Bit n    Descripcin
' ---------     -----     ---------------------------
' fCtsHold        1       Tx en espera de seal CTS 
' fDsrHold        2       Tx en espera de seal DSR
' fRlsdHold       3       Tx en espera de seal RLSD 
' fXoffHold       4       Tx en espera, carcter XOFF recibido
' fXoffSent       5       Tx en espera, carcter XOFF enviado
' fEof            6       Carcter EOF enviado
' fTxim           7       Carcter en espera de Tx
' fReserved       8       Reservado (25 bits)

'  Valores de flujo del control DTR.
Const DTR_CONTROL_DISABLE = &H0
Const DTR_CONTROL_ENABLE = &H1
Const DTR_CONTROL_HANDSHAKE = &H2

'  Valores de flujo del control RTS.
Const RTS_CONTROL_DISABLE = &H0
Const RTS_CONTROL_ENABLE = &H1
Const RTS_CONTROL_HANDSHAKE = &H2
Const RTS_CONTROL_TOGGLE = &H3

'Type DCB
'        DCBlength As Long
'        BaudRate As Long
'        fBinary As Long
'        fParity As Long
'        fOutxCtsFlow As Long
'        fOutxDsrFlow As Long
'        fDtrControl As Long
'        fDsrSensitivity As Long
'        fTXContinueOnXoff As Long
'        fOutX As Long
'        fInX As Long
'        fErrorChar As Long
'        fNull As Long
'        fRtsControl As Long
'        fAbortOnError As Long
'        fDummy2 As Long
'        wReserved As Integer
'        XonLim As Integer
'        XoffLim As Integer
'        ByteSize As Byte
'        Parity As Byte
'        StopBits As Byte
'        XonChar As Byte
'        XoffChar As Byte
'        ErrorChar As Byte
'        EofChar As Byte
'        EvtChar As Byte
'End Type

Type DCB
        DCBlength As Long
        BaudRate As Long
        fBitFields As Long ' Vea los comentarios en Win32API.Txt
        wReserved As Integer
        XonLim As Integer
        XoffLim As Integer
        ByteSize As Byte
        Parity As Byte
        StopBits As Byte
        XonChar As Byte
        XoffChar As Byte
        ErrorChar As Byte
        EofChar As Byte
        EvtChar As Byte
        wReserved1 As Integer ' Reservado; no utilizar
End Type
' Los catorce campos de datos reales con tamao de bit DCB dentro de los cuatro bytes de 
' fBitFields pueden manipularse mediante operaciones lgicas de bits And/Or.
' Campo                 Bit n    Descripcin
' -----------------     -----     ------------------------------
' fBinary                 1       Modo binario, sin comprobacin de EOF
' fParity                 2       Activar comprobacin de paridad
' fOutxCtsFlow            3       Control de flujo de salida de CTS 
' fOutxDsrFlow            4       Control de flujo de salida de DSR 
' fDtrControl             5       Tipo de control de flujo de DTR (2 bits)
' fDsrSensitivity         7       Sensibilidad DSR 
' fTXContinueOnXoff       8       XOFF contina Tx
' fOutX                   9       Control de flujo de salida de XON/XOFF 
' fInX                   10       Control de flujo de entrada de XON/XOFF 
' fErrorChar             11       Activar reemplazo de errores
' fNull                  12       Activar eliminacin de valores null 
' fRtsControl            13       Control de flujo de RTS (2 bits)
' fAbortOnError          15       Anular lecturas y escrituras con error
' fDummy2                16       Reservado

Type COMMTIMEOUTS
        ReadIntervalTimeout As Long
        ReadTotalTimeoutMultiplier As Long
        ReadTotalTimeoutConstant As Long
        WriteTotalTimeoutMultiplier As Long
        WriteTotalTimeoutConstant As Long
End Type

Type SYSTEM_INFO
        dwOemID As Long
        dwPageSize As Long
        lpMinimumApplicationAddress As Long
        lpMaximumApplicationAddress As Long
        dwActiveProcessorMask As Long
        dwNumberOrfProcessors As Long
        dwProcessorType As Long
        dwAllocationGranularity As Long
        dwReserved As Long
End Type

' Indicadores globales de memoria
Const GMEM_FIXED = &H0
Const GMEM_MOVEABLE = &H2
Const GMEM_NOCOMPACT = &H10
Const GMEM_NODISCARD = &H20
Const GMEM_ZEROINIT = &H40
Const GMEM_MODIFY = &H80
Const GMEM_DISCARDABLE = &H100
Const GMEM_NOT_BANKED = &H1000
Const GMEM_SHARE = &H2000
Const GMEM_DDESHARE = &H2000
Const GMEM_NOTIFY = &H4000
Const GMEM_LOWER = GMEM_NOT_BANKED
Const GMEM_VALID_FLAGS = &H7F72
Const GMEM_INVALID_HANDLE = &H8000

Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)
Const GPTR = (GMEM_FIXED Or GMEM_ZEROINIT)

' Indicadores devueltos por GlobalFlags (adems de GMEM_DISCARDABLE)
Const GMEM_DISCARDED = &H4000
Const GMEM_LOCKCOUNT = &HFF

Type MEMORYSTATUS
        dwLength As Long
        dwMemoryLoad As Long
        dwTotalPhys As Long
        dwAvailPhys As Long
        dwTotalPageFile As Long
        dwAvailPageFile As Long
        dwTotalVirtual As Long
        dwAvailVirtual As Long
End Type

' Indicadores de memoria local 
Const LMEM_FIXED = &H0
Const LMEM_MOVEABLE = &H2
Const LMEM_NOCOMPACT = &H10
Const LMEM_NODISCARD = &H20
Const LMEM_ZEROINIT = &H40
Const LMEM_MODIFY = &H80
Const LMEM_DISCARDABLE = &HF00
Const LMEM_VALID_FLAGS = &HF72
Const LMEM_INVALID_HANDLE = &H8000

Const LHND = (LMEM_MOVEABLE + LMEM_ZEROINIT)
Const LPTR = (LMEM_FIXED + LMEM_ZEROINIT)

Const NONZEROLHND = (LMEM_MOVEABLE)
Const NONZEROLPTR = (LMEM_FIXED)

' Indicadores devueltos por LocalFlags (adems de LMEM_DISCARDABLE)
Const LMEM_DISCARDED = &H4000
Const LMEM_LOCKCOUNT = &HFF

' Valores de dwCreationFlag 

Const DEBUG_PROCESS = &H1
Const DEBUG_ONLY_THIS_PROCESS = &H2

Const CREATE_SUSPENDED = &H4

Const DETACHED_PROCESS = &H8

Const CREATE_NEW_CONSOLE = &H10

Const NORMAL_PRIORITY_CLASS = &H20
Const IDLE_PRIORITY_CLASS = &H40
Const HIGH_PRIORITY_CLASS = &H80
Const REALTIME_PRIORITY_CLASS = &H100

Const CREATE_NEW_PROCESS_GROUP = &H200

Const CREATE_NO_WINDOW = &H8000000

Const PROFILE_USER = &H10000000
Const PROFILE_KERNEL = &H20000000
Const PROFILE_SERVER = &H40000000

Const MAXLONG = &H7FFFFFFF
Const THREAD_BASE_PRIORITY_MIN = -2
Const THREAD_BASE_PRIORITY_MAX = 2
Const THREAD_BASE_PRIORITY_LOWRT = 15
Const THREAD_BASE_PRIORITY_IDLE = -15
Const THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN
Const THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST + 1)
Const THREAD_PRIORITY_NORMAL = 0
Const THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX
Const THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST - 1)
Const THREAD_PRIORITY_ERROR_RETURN = (MAXLONG)

Const THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT
Const THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE

' ++ BUILD Versin: 0093     Incremente este valor cuando un cambio tenga efectos globales

' Copyright (c) 1990-1995  Microsoft Corporation

' Nombre del mdulo:

'     winnt.h

' Resumen:

'     Este mdulo define los tipos y constantes de Windows de 32 bits 
'     definidos por NT, pero ofrecidos por medio de la API de Win32.

' Historial de revisiones:
Const APPLICATION_ERROR_MASK = &H20000000
Const ERROR_SEVERITY_SUCCESS = &H0
Const ERROR_SEVERITY_INFORMATIONAL = &H40000000
Const ERROR_SEVERITY_WARNING = &H80000000
Const ERROR_SEVERITY_ERROR = &HC0000000


Const MINCHAR = &H80
Const MAXCHAR = &H7F
Const MINSHORT = &H8000
Const MAXSHORT = &H7FFF
Const MINLONG = &H80000000
Const MAXByte = &HFF
Const MAXWORD = &HFFFF
Const MAXDWORD = &HFFFF
'
'  Calcula el desplazamiento de bytes de un campo en una estructura de tipo.
'  *  Id. de idiomas.
'  *
'  *  Las dos combinaciones siguientes de Id. de idioma primario e Id. de
'  *  subidioma tienen una semntica especial:
'  *
'  *    Id. idioma primario   Id. subidioma       Resultado
'  *    -------------------   ---------------     ------------------------
'  *    LANG_NEUTRAL          SUBLANG_NEUTRAL     Idioma neutro
'  *    LANG_NEUTRAL          SUBLANG_DEFAULT     Idioma predeterminado del usuario
'  *    LANG_NEUTRAL          SUBLANG_SYS_DEFAULT Idioma predeterminado del sistema
'  */
'
'  *  Id. de los idiomas primarios.
'  */
Const LANG_NEUTRAL = &H0

Const LANG_BULGARIAN = &H2
Const LANG_CHINESE = &H4
Const LANG_CROATIAN = &H1A
Const LANG_CZECH = &H5
Const LANG_DANISH = &H6
Const LANG_DUTCH = &H13
Const LANG_ENGLISH = &H9
Const LANG_FINNISH = &HB
Const LANG_FRENCH = &HC
Const LANG_GERMAN = &H7
Const LANG_GREEK = &H8
Const LANG_HUNGARIAN = &HE
Const LANG_ICELANDIC = &HF
Const LANG_ITALIAN = &H10
Const LANG_JAPANESE = &H11
Const LANG_KOREAN = &H12
Const LANG_NORWEGIAN = &H14
Const LANG_POLISH = &H15
Const LANG_PORTUGUESE = &H16
Const LANG_ROMANIAN = &H18
Const LANG_RUSSIAN = &H19
Const LANG_SLOVAK = &H1B
Const LANG_SLOVENIAN = &H24
Const LANG_SPANISH = &HA
Const LANG_SWEDISH = &H1D
Const LANG_TURKISH = &H1F

'
'  *  Id. de los subidiomas.
'  *
'  *  El nombre que aparece inmediatamente a continuacin de SUBLANG_
'  *  indica el Id. del idioma primario con el que se puede combinar el Id.
'  *  de ese subidioma para formar un Id. de idioma vlido.
'  */
Const SUBLANG_NEUTRAL = &H0                       '  idioma neutro
Const SUBLANG_DEFAULT = &H1                       '  predeterminado del usuario
Const SUBLANG_SYS_DEFAULT = &H2                   '  predeterminado del sistema

Const SUBLANG_CHINESE_TRADITIONAL = &H1           '  Chino (Taiwan)
Const SUBLANG_CHINESE_SIMPLIFIED = &H2            '  Chino (RP China)
Const SUBLANG_CHINESE_HONGKONG = &H3              '  Chino (Hong Kong)
Const SUBLANG_CHINESE_SINGAPORE = &H4             '  Chino (Singapur)
Const SUBLANG_DUTCH = &H1                         '  Holands
Const SUBLANG_DUTCH_BELGIAN = &H2                 '  Holands (Belga)
Const SUBLANG_ENGLISH_US = &H1                    '  Ingls (EE.UU.)
Const SUBLANG_ENGLISH_UK = &H2                    '  Ingls (Reino Unido)
Const SUBLANG_ENGLISH_AUS = &H3                   '  Ingls (Australiano)
Const SUBLANG_ENGLISH_CAN = &H4                   '  Ingls (Canadiense)
Const SUBLANG_ENGLISH_NZ = &H5                    '  Ingls (Nueva Zelanda)
Const SUBLANG_ENGLISH_EIRE = &H6                  '  Ingls (Irlanda)
Const SUBLANG_FRENCH = &H1                        '  Francs
Const SUBLANG_FRENCH_BELGIAN = &H2                '  Francs (Belga)
Const SUBLANG_FRENCH_CANADIAN = &H3               '  Francs (Canadiense)
Const SUBLANG_FRENCH_SWISS = &H4                  '  Francs (Suiza)
Const SUBLANG_GERMAN = &H1                        '  Alemn
Const SUBLANG_GERMAN_SWISS = &H2                  '  Alemn (Suiza)
Const SUBLANG_GERMAN_AUSTRIAN = &H3               '  Alemn (Austria)
Const SUBLANG_ITALIAN = &H1                       '  Italiano
Const SUBLANG_ITALIAN_SWISS = &H2                 '  Italiano (Suiza)
Const SUBLANG_NORWEGIAN_BOKMAL = &H1              '  Noruego (Bokma)
Const SUBLANG_NORWEGIAN_NYNORSK = &H2             '  Noruego (Nynorsk)
Const SUBLANG_PORTUGUESE = &H2                    '  Portugus
Const SUBLANG_PORTUGUESE_BRAZILIAN = &H1          '  Portugus (Brasil)
Const SUBLANG_SPANISH = &H1                       '  Espaol (Castellano)
Const SUBLANG_SPANISH_MEXICAN = &H2               '  Espaol (Mxico)
Const SUBLANG_SPANISH_MODERN = &H3                '  Espaol (Moderno)

'
'  *  Id. de orden.
'  *
'  */
Const SORT_DEFAULT = &H0                          '  Orden predeterminado

Const SORT_JAPANESE_XJIS = &H0                    '  Orden Japons0xJIS
Const SORT_JAPANESE_UNICODE = &H1                 '  Orden Unicode japons

Const SORT_CHINESE_BIG5 = &H0                     '  Orden chino BIG5
Const SORT_CHINESE_UNICODE = &H1                  '  Orden Unicode chino

Const SORT_KOREAN_KSC = &H0                       '  Orden coreano KSC
Const SORT_KOREAN_UNICODE = &H1                   '  Orden Unicode coreano

'  Las constantes FILE_READ_DATA y FILE_WRITE_DATA tambin estn definidas en
'  devioctl.h como FILE_READ_ACCESS y FILE_WRITE_ACCESS. Los valores para estas
'  constantes siempre *TIENEN* que estar sincronizados.
'  Los valores se han vuelto a definir en devioctl.h porque tienen que estar disponibles
'  para DOS y NT.
'

Const FILE_READ_DATA = (&H1)                     '  canalizacin de archivo
Const FILE_LIST_DIRECTORY = (&H1)                '  directorio

Const FILE_WRITE_DATA = (&H2)                    '  canalizacin de archivo
Const FILE_ADD_FILE = (&H2)                      '  directorio

Const FILE_APPEND_DATA = (&H4)                   '  archivo
Const FILE_ADD_SUBDIRECTORY = (&H4)              '  directorio
Const FILE_CREATE_PIPE_INSTANCE = (&H4)          '  canalizacin con nombre

Const FILE_READ_EA = (&H8)                       '  directorio de archivo
Const FILE_READ_PROPERTIES = FILE_READ_EA

Const FILE_WRITE_EA = (&H10)                     '  directorio de archivo
Const FILE_WRITE_PROPERTIES = FILE_WRITE_EA

Const FILE_EXECUTE = (&H20)                      '  archivo
Const FILE_TRAVERSE = (&H20)                     '  directorio

Const FILE_DELETE_CHILD = (&H40)                 '  directorio

Const FILE_READ_ATTRIBUTES = (&H80)              '  todos

Const FILE_WRITE_ATTRIBUTES = (&H100)            '  todos

Const FILE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &H1FF)

Const FILE_GENERIC_READ = (STANDARD_RIGHTS_READ Or FILE_READ_DATA Or FILE_READ_ATTRIBUTES Or FILE_READ_EA Or SYNCHRONIZE)


Const FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE Or FILE_WRITE_DATA Or FILE_WRITE_ATTRIBUTES Or FILE_WRITE_EA Or FILE_APPEND_DATA Or SYNCHRONIZE)


Const FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE Or FILE_READ_ATTRIBUTES Or FILE_EXECUTE Or SYNCHRONIZE)

Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_TEMPORARY = &H100
Const FILE_ATTRIBUTE_COMPRESSED = &H800
Const FILE_NOTIFY_CHANGE_FILE_NAME = &H1
Const FILE_NOTIFY_CHANGE_DIR_NAME = &H2
Const FILE_NOTIFY_CHANGE_ATTRIBUTES = &H4
Const FILE_NOTIFY_CHANGE_SIZE = &H8
Const FILE_NOTIFY_CHANGE_LAST_WRITE = &H10
Const FILE_NOTIFY_CHANGE_SECURITY = &H100
Const MAILSLOT_NO_MESSAGE = (-1)
Const MAILSLOT_WAIT_FOREVER = (-1)
Const FILE_CASE_SENSITIVE_SEARCH = &H1
Const FILE_CASE_PRESERVED_NAMES = &H2
Const FILE_UNICODE_ON_DISK = &H4
Const FILE_PERSISTENT_ACLS = &H8
Const FILE_FILE_COMPRESSION = &H10
Const FILE_VOLUME_IS_COMPRESSED = &H8000
Const IO_COMPLETION_MODIFY_STATE = &H2
Const IO_COMPLETION_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &H3)
Const DUPLICATE_CLOSE_SOURCE = &H1
Const DUPLICATE_SAME_ACCESS = &H2

' //////////////////////////////////////////////////////////////////////
'                                                                     //
'                           MSCARA DE ACCESO                         //
'                                                                     //
' //////////////////////////////////////////////////////////////////////

'	
'   Defina la mscara de acceso como una estructura de palabra larga dividida
'   de la manera siguiente:


'       typedef struct _ACCESS_MASK {
'           WORD   SpecificRights;
'           Byte  StandardRights;
'           Byte  AccessSystemAcl : 1;
'           Byte  Reserved : 3;
'           Byte  GenericAll : 1;
'           Byte  GenericExecute : 1;
'           Byte  GenericWrite : 1;
'           Byte  GenericRead : 1;
'       } ACCESS_MASK;
'       typedef ACCESS_MASK *PACCESS_MASK;
'
'   pero para facilitar su trabajo, los programadores pueden especificar
'   la mscara de acceso que deseen con slo agregar mediante OR 
'   varios derechos sencillos y tratar la mscara como DWORD. Por ejemplo:
'
'       DesiredAccess = DELETE  Or  READ_CONTROL
'
'   De esta forma se declara ACCESS_MASK como DWORD
'

'  begin_ntddk begin_nthal begin_ntifs

' //////////////////////////////////////////////////////////////////////
'                                                                     //
'                             TIPOS DE ACCESO                         //
'                                                                     //
' //////////////////////////////////////////////////////////////////////


'  begin_ntddk begin_nthal begin_ntifs
'
'  Las mscaras siguientes son para los tipos de acceso estndar predefinidos

'  Tipo de acceso AccessSystemAcl type

Const ACCESS_SYSTEM_SECURITY = &H1000000

'  Tipo de acceso MaximumAllowed 

Const MAXIMUM_ALLOWED = &H2000000

'   Estos son los derechos genricos.

Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000
Const GENERIC_EXECUTE = &H20000000
Const GENERIC_ALL = &H10000000

'   Defina la matriz de asignacin genrica.  Se usa para indicar la asignacin
'   de cada derecho de acceso genrico a una mscara de acceso especfica.

Type GENERIC_MAPPING
        GenericRead As Long
        GenericWrite As Long
        GenericExecute As Long
        GenericAll As Long
End Type


' //////////////////////////////////////////////////////////////////////
'                                                                     //
'                         LUID_AND_ATTRIBUTES                         //
'                                                                     //
' //////////////////////////////////////////////////////////////////////
'
Type LUID
	LowPart As Long
	HighPart As Long
End Type


Type LUID_AND_ATTRIBUTES
        pLuid As LUID
        Attributes As Long
End Type

' //////////////////////////////////////////////////////////////////////
'                                                                     //
'                            ACL y ACE                                //
'                                                                     //
' //////////////////////////////////////////////////////////////////////

'
'   Defina una ACL y el formato ACE. La estructura de un encabezado ACL
'   seguida por una o ms ACE. La descripcin de la estructura de un
'   encabezado ACL sera la siguiente:
'
'   La AclRevision actual est definida como ACL_REVISION.
'
'   AclSize es el tamao, en bytes, asignado a la ACL. Esto incluye el
'   encabezado de ACL, ACE y el espacio que queda libre en el bfer.
'
'   AceCount es el nmero de ACE que contiene la ACL.
'

'  begin_ntddk begin_ntifs
'  Esta es la revisin de ACL *actual*

Const ACL_REVISION = (2)

'  Este es el historial de las revisiones de ACL. Agregue una nueva siempre 
'  que se actualice ACL_REVISION

Const ACL_REVISION1 = (1)
Const ACL_REVISION2 = (2)

Type ACL
        AclRevision As Byte
        Sbz1 As Byte
        AclSize As Integer
        AceCount As Integer
        Sbz2 As Integer
End Type

' typedef ACL *PACL;

'  end_ntddk

'   La estructura de un ACE es un encabezado ACE comn seguido de los
'   datos especficos del tipo de ACE.  La descripcin de la estructura del
'   encabezado ACE normal sera la siguiente:

'   AceType denota el tipo de ACE; hay algunos tipos ACE predefinidos
'
'   AceSize es el tamao, en bytes, del ACE.
'
'   AceFlags son indicadores de ACE para auditora y herencia. Se definen con enteros.

Type ACE_HEADER
        AceType As Byte
        AceFlags As Byte
        AceSize As Long
End Type
'
'   Los siguientes tipos son los predefinidos de ACE que van en el campo 
'   AceType del encabezado ACE.

Const ACCESS_ALLOWED_ACE_TYPE = &H0
Const ACCESS_DENIED_ACE_TYPE = &H1
Const SYSTEM_AUDIT_ACE_TYPE = &H2
Const SYSTEM_ALARM_ACE_TYPE = &H3

'   Los siguientes indicadores son los heredados que van en el campo 
'   AceFlags del encabezado ACE.

Const OBJECT_INHERIT_ACE = &H1
Const CONTAINER_INHERIT_ACE = &H2
Const NO_PROPAGATE_INHERIT_ACE = &H4
Const INHERIT_ONLY_ACE = &H8
Const VALID_INHERIT_FLAGS = &HF


'   Los siguientes son los indicadores ACE definidos actualmente, que van en el
'   campo AceFlags del encabezado ACE. Cada tipo de ACE tiene su propio 
'   conjunto de AceFlags.
'
'   SUCCESSFUL_ACCESS_ACE_FLAG - se usa slo con tipos de ACE de auditora 
'   del sistema y de alarma para indicar que se ha generado un mensaje para 
'   accesos satisfactorios.
'
'   FAILED_ACCESS_ACE_FLAG - se usa slo con tipos de ACE de auditora y 
'   alarma para indicar que se ha generado un mensaje para accesos fallidos.

'   Indicadores AceFlags SYSTEM_AUDIT y SYSTEM_ALARM
'
'   Controlan la sealizacin de auditora y alarmas para accesos correctos o fallidos.

Const SUCCESSFUL_ACCESS_ACE_FLAG = &H40
Const FAILED_ACCESS_ACE_FLAG = &H80


'
'   A continuacin definiremos la estructura de los tipos de ACE predefinidos. 
'   La descripcin de la estructura de los ACE predefinidos es la siguiente:

'   Mask es la mscara de acceso asociada al ACE. Puede ser la
'   mscara de acceso permitido, acceso denegado, auditora o alarma.
'
'   Sid es el SID asociado al ACE.
'
'   Los siguientes son los cuatro tipos de ACE predefinidos.
'   Examine el campo AceType del Header para determinar
'   qu estructura es la apropiada para clculos.


Type ACCESS_ALLOWED_ACE
        Header As ACE_HEADER
        Mask As Long
        SidStart As Long
End Type

Type ACCESS_DENIED_ACE
        Header As ACE_HEADER
        Mask As Long
        SidStart As Long
End Type


Type SYSTEM_AUDIT_ACE
        Header As ACE_HEADER
        Mask As Long
        SidStart As Long
End Type

Type SYSTEM_ALARM_ACE
        Header As ACE_HEADER
        Mask As Long
        SidStart As Long
End Type

'   Las siguientes declaraciones se usan para configurar y consultar informacin
'   sobre una ACL. Primero estn las diversas clases de informacin disponibles
'   para el usuario.
'

Const AclRevisionInformation = 1
Const AclSizeInformation = 2
'
'   Este registro se devuelve o enva si el usuario est pidiendo o configurando
'   AclRevisionInformation
'

Type ACL_REVISION_INFORMATION
        AclRevision As Long
End Type

'
'   Se devuelve este registro cuando el usuario pide AclSizeInformation
'

Type ACL_SIZE_INFORMATION
        AceCount As Long
        AclBytesInUse As Long
        AclBytesFree As Long
End Type

' //////////////////////////////////////////////////////////////////////
'                                                                     //
'                              SECURITY_DESCRIPTOR                    //
'                                                                     //
' //////////////////////////////////////////////////////////////////////
'
'   Defina el Descriptor de seguridad y los tipos de datos
'   relacionados. Es una estructura de datos opaca.
'

'  begin_ntddk begin_ntifs
'
'  Valor de la revisin actual del descriptor de seguridad
'

Const SECURITY_DESCRIPTOR_REVISION = (1)
Const SECURITY_DESCRIPTOR_REVISION1 = (1)

'  end_ntddk

'
'  Longitud mnima, en bytes, necesaria para generar un descriptor de seguridad.
'  (NOTA: Tiene que conservar manualmente la coherencia con el)
'  (tamao de (SECURITY_DESCRIPTOR)                           )
'

Const SECURITY_DESCRIPTOR_MIN_LENGTH = (20)



Const SE_OWNER_DEFAULTED = &H1
Const SE_GROUP_DEFAULTED = &H2
Const SE_DACL_PRESENT = &H4
Const SE_DACL_DEFAULTED = &H8
Const SE_SACL_PRESENT = &H10
Const SE_SACL_DEFAULTED = &H20
Const SE_SELF_RELATIVE = &H8000

'
'   Donde:
'
'       SE_OWNER_DEFAULTED: indicador booleano que, cuando est
'           activado, indica que el SID al que seala el campo Owner
'           lo ha proporcionado un mecanismo predeterminado y no
'           el que proporciona explcitamente el proveedor
'           original del descriptor de seguridad. Puede afectar al
'           tratamiento del SID respecto a las revisiones posteriores
'           de un propietario.
'
'       SE_GROUP_DEFAULTED: indicador booleano que, cuando est
'           activado, indica que el SID contenido en el campo Group
'           lo ha proporcionado un mecanismo predeterminado y no
'           el que proporciona explcitamente el proveedor
'           original del descriptor de seguridad. Puede afectar al
'           tratamiento del SID respecto a las revisiones posteriores
'           de un grupo primario.
'
'       SE_DACL_PRESENT: indicador booleano que, cuando est
'           activado, indica que el descriptor de seguridad contiene
'           una ACL discrecional. Si este indicador est establecido y el
'           campo Dacl de SECURITY_DESCRIPTOR es
'           null, se est especificando explcitamente una ACL null.
'
'       SE_DACL_DEFAULTED: indicador booleano que, cuando est
'           activado, indica que la ACL a la que seala el campo Dacl
'           la ha proporcionado un mecanismo predeterminado y no
'           el que proporciona explcitamente el proveedor
'           original del descriptor de seguridad. Puede afectar al
'           tratamiento de la ACL respecto a las revisiones posteriores de
'           una ACL. Este indicador se pasa por alto si el indicador DaclPresent 
'           no est establecido.
'
'       SE_SACL_PRESENT: indicador booleano que, cuando est
'           activado, indica que el descriptor de seguridad contiene 
'           una ACL de sistema a la que seala el campo Sacl. Si est 
'           establecido este indicador y el campo Sacl de
'           SECURITY_DESCRIPTOR es null, se est especificando
'           una ACL vaca (pero presente.
'
'       SE_SACL_DEFAULTED: indicador booleano que, cuando est
'           activado, indica que la ACL a la que seala el campo Sacl
'           lo ha proporcionado un mecanismo predeterminado y no
'           el que proporciona explcitamente el proveedor
'           original del descriptor de seguridad. Puede afectar al
'           tratamiento de la ACL respecto a las revisiones posteriores de
'           una ACL. Este indicador se pasa por alto si el indicador SaclPresent
'           no est establecido.
'
'       SE_SELF_RELATIVE: indicador booleano que, cuando est
'           activado, indica que el descriptor de seguridad est en un
'           formulario relativo a s mismo. En este formulario, todos los campos
'           del descriptor de seguridad son contiguos en la memoria
'           y todos los campos de indicadores se expresan como desplazamientos
'           desde el principio del descriptor de seguridad. Este formulario es til
'           para el tratamiento de los descriptores de seguridad como estructuras de
'           datos opacas para la transmisin en protocolos de comunicaciones
'           o para su almacenamiento en medios secundarios.
'
'
'
'  En general, esta estructura de datos se debe tratar como una estructura 
'  opaca para garantizar su compatibilidad en el futuro.
'
'

Type SECURITY_DESCRIPTOR
        Revision As Byte
        Sbz1 As Byte
        Control As Long
        Owner As Long
        Group As Long
        Sacl As ACL
        Dacl As ACL
End Type


'  Donde:
'
'      Revision: contiene el nivel de revisin del descriptor de
'          seguridad. Permite transferir esta estructura entre dos
'          sistemas o guardarla en disco aunque se espere que cambie
'          en el futuro.
'
'      Control: conjunto de indicadores que califican el significado
'          del descriptor de seguridad o de campos individuales del
'          descriptor de seguridad.
'
'      Owner: es un puntero a un SID que representa el 
'          propietario de un objeto. Si este campo tiene el valor null, 
'          no hay ningn SID propietario presente en el descriptor
'          de seguridad. Si el descriptor de seguridad est en un 
'          formulario relativo a s mismo, este campo contiene un 
'          desplazamiento para el SID, y no un puntero.
'
'      Group: es un puntero a un SID que representa el grupo 
'          primario de un objeto. Si este campo tiene el valor null, no hay
'          ningn SID de grupo primario presente en el descriptor
'          de seguridad. Si el descriptor de seguridad est en un 
'          formulario relativo a s mismo, este campo contiene un
'          desplazamiento para el SID, y no un puntero.
'
'      Sacl: es un puntero que indica una ACL de sistema. El valor de 
'          este campo slo es vlido si est activado el indicador del 
'          control DaclPresent. Si est establecido el indicador de 
'          SaclPresent y el valor de este campo es null, se especifica
'          una ACL nula. Si el descriptor de seguridad est en un formulario 
'          relativo a s mismo, este campo contiene un desplazamiento para 
'          la ACL, y no un puntero.
'
'      Dacl: es un puntero que indica una ACL discrecional. El valor de 
'          este campo slo es vlido si est activado el indicador del 
'          control DaclPresent. Si est establecido el indicador de 
'          DaclPresent y el valor de este campo es null, se especifica 
'          una ACL nula (permite acceso incondicional). Si el descriptor de 
'          seguridad est en un formulario relativo a s mismo, este 
'          campo contiene un desplazamiento de la ACL, y no un puntero.
'



' //////////////////////////////////////////////////////////////////////
'                                                                     //
'           Estructuras de datos relacionadas con Privilege           //
'                                                                     //
' //////////////////////////////////////////////////////////////////////


'  Atributos de Privilege 
'

Const SE_PRIVILEGE_ENABLED_BY_DEFAULT = &H1
Const SE_PRIVILEGE_ENABLED = &H2
Const SE_PRIVILEGE_USED_FOR_ACCESS = &H80000000

'
'  Indicadores de control de Privilege Set 
'

Const PRIVILEGE_SET_ALL_NECESSARY = (1)

'
'   Privilege Set - Est definido para un conjunto de privilegios de uno.
'                   Si se necesitan dos o ms privilegios, habr que asignar 
'                   ms espacio a esta estructura.
'
'   Nota: no cambie esta estructura sin fijar la estructura INITIAL_PRIVILEGE_SET
'   (definida en se.h)
'

Type PRIVILEGE_SET
        PrivilegeCount As Long
        Control As Long
        Privilege(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type


'///////////////////////////////////////////////////////////////////////
'                                                                     //
'                Privilegios definidos por NT                         //
'                                                                     //
' //////////////////////////////////////////////////////////////////////

Const SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege"
Const SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege"
Const SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege"
Const SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege"
Const SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege"
Const SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege"
Const SE_TCB_NAME = "SeTcbPrivilege"
Const SE_SECURITY_NAME = "SeSecurityPrivilege"
Const SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege"
Const SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege"
Const SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege"
Const SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege"
Const SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege"
Const SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege"
Const SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege"
Const SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege"
Const SE_BACKUP_NAME = "SeBackupPrivilege"
Const SE_RESTORE_NAME = "SeRestorePrivilege"
Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
Const SE_DEBUG_NAME = "SeDebugPrivilege"
Const SE_AUDIT_NAME = "SeAuditPrivilege"
Const SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege"
Const SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege"
Const SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege"


' //////////////////////////////////////////////////////////////////
'                                                                 //
'            Calidad de seguridad del servicio                    //
'                                                                 //
'                                                                 //
' //////////////////////////////////////////////////////////////////

'  begin_ntddk begin_nthal begin_ntifs
'
'  Nivel de suplantacin 
'
'  El nivel de suplantacin est representado por un par de bits en Windows.
'  Si agrega un nivel de suplantacin nuevo o cambia el valor inferior de 0 a 
'  cualquier otro, fije la llamada CreateFile de Windows.
'

Const SecurityAnonymous = 1
Const SecurityIdentification = 2

'///////////////////////////////////////////////////////////////////////
'                                                                     //
'                Constantes de la API del Registro                    //
'                                                                     //
' //////////////////////////////////////////////////////////////////////

' Tipos de datos Reg...
Const REG_NONE = 0                       ' Sin tipo de valor 
Const REG_SZ = 1                         ' Cadena Unicode terminada en valor nulo
Const REG_EXPAND_SZ = 2                  ' Cadena Unicode terminada en valor nulo
Const REG_BINARY = 3                     ' Binario de formato libre 
Const REG_DWORD = 4                      ' Nmero de 32 bits
Const REG_DWORD_LITTLE_ENDIAN = 4        ' Nmero de 32 bits (el mismo que en REG_DWORD)
Const REG_DWORD_BIG_ENDIAN = 5           ' Nmero de 32 bits
Const REG_LINK = 6                       ' Vnculo simblico (Unicode)
Const REG_MULTI_SZ = 7                   ' Cadenas mltiples Unicode
Const REG_RESOURCE_LIST = 8              ' Lista de recursos en el mapa de recursos 
Const REG_FULL_RESOURCE_DESCRIPTOR = 9   ' Lista de recursos en la descripcin del hardware
Const REG_RESOURCE_REQUIREMENTS_LIST = 10
Const REG_CREATED_NEW_KEY = &H1          ' Creada clave de registro nueva
Const REG_OPENED_EXISTING_KEY = &H2      ' Abierta clave existente 
Const REG_WHOLE_HIVE_VOLATILE = &H1      ' Restaura todo el conjunto de registros voltiles
Const REG_REFRESH_HIVE = &H2             ' Revierte los cambios a los del ltimo vaciado
Const REG_NOTIFY_CHANGE_NAME = &H1       ' Crea o elimina (secundario)
Const REG_NOTIFY_CHANGE_ATTRIBUTES = &H2
Const REG_NOTIFY_CHANGE_LAST_SET = &H4   ' Marca de hora
Const REG_NOTIFY_CHANGE_SECURITY = &H8
Const REG_LEGAL_CHANGE_FILTER = (REG_NOTIFY_CHANGE_NAME Or REG_NOTIFY_CHANGE_ATTRIBUTES Or REG_NOTIFY_CHANGE_LAST_SET Or REG_NOTIFY_CHANGE_SECURITY)
Const REG_LEGAL_OPTION = (REG_OPTION_RESERVED Or REG_OPTION_NON_VOLATILE Or REG_OPTION_VOLATILE Or REG_OPTION_CREATE_LINK Or REG_OPTION_BACKUP_RESTORE)

' Valores del tipo crear Reg...
Const REG_OPTION_RESERVED = 0           ' El parmetro est reservado
Const REG_OPTION_NON_VOLATILE = 0       ' La clave se conserva al reiniciar el sistema
Const REG_OPTION_VOLATILE = 1           ' La clave no se conserva al reiniciar el sistema
Const REG_OPTION_CREATE_LINK = 2        ' La clave creada es un vnculo simblico
Const REG_OPTION_BACKUP_RESTORE = 4     ' Abierto para copia de seguridad o restaurar

' Opciones de seguridad de la clave Reg
' Const READ_CONTROL = &H20000
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_CREATE_LINK = &H20
Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
' Const STANDARD_RIGHTS_READ = (READ_CONTROL)
' Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))

' fin de winnt.txt

' API de depuracin
Const EXCEPTION_DEBUG_EVENT = 1
Const CREATE_THREAD_DEBUG_EVENT = 2
Const CREATE_PROCESS_DEBUG_EVENT = 3
Const EXIT_THREAD_DEBUG_EVENT = 4
Const EXIT_PROCESS_DEBUG_EVENT = 5
Const LOAD_DLL_DEBUG_EVENT = 6
Const UNLOAD_DLL_DEBUG_EVENT = 7
Const OUTPUT_DEBUG_STRING_EVENT = 8
Const RIP_EVENT = 9

Const EXCEPTION_MAXIMUM_PARAMETERS = 15

Type EXCEPTION_RECORD
    ExceptionCode As Long
    ExceptionFlags As Long
    pExceptionRecord As Long	' Puntero a una estructura EXCEPTION_RECORD
    ExceptionAddress As Long
    NumberParameters As Long
    ExceptionInformation(EXCEPTION_MAXIMUM_PARAMETERS) As Long
End Type

Type EXCEPTION_DEBUG_INFO
        pExceptionRecord As EXCEPTION_RECORD
        dwFirstChance As Long
End Type

Type CREATE_THREAD_DEBUG_INFO
        hThread As Long
        lpThreadLocalBase As Long
        lpStartAddress As Long
End Type

Type CREATE_PROCESS_DEBUG_INFO
        hFile As Long
        hProcess As Long
        hThread As Long
        lpBaseOfImage As Long
        dwDebugInfoFileOffset As Long
        nDebugInfoSize As Long
        lpThreadLocalBase As Long
        lpStartAddress As Long
        lpImageName As Long
        fUnicode As Integer
End Type

Type EXIT_THREAD_DEBUG_INFO
        dwExitCode As Long
End Type

Type EXIT_PROCESS_DEBUG_INFO
        dwExitCode As Long
End Type

Type LOAD_DLL_DEBUG_INFO
        hFile As Long
        lpBaseOfDll As Long
        dwDebugInfoFileOffset As Long
        nDebugInfoSize As Long
        lpImageName As Long
        fUnicode As Integer
End Type

Type UNLOAD_DLL_DEBUG_INFO
        lpBaseOfDll As Long
End Type

Type OUTPUT_DEBUG_STRING_INFO
        lpDebugStringData As String
        fUnicode As Integer
        nDebugStringLength As Integer
End Type

Type RIP_INFO
        dwError As Long
        dwType As Long
End Type

' Valores de retorno de GetDriveType
Const DRIVE_REMOVABLE = 2
Const DRIVE_FIXED = 3
Const DRIVE_REMOTE = 4
Const DRIVE_CDROM = 5
Const DRIVE_RAMDISK = 6

Const FILE_TYPE_UNKNOWN = &H0
Const FILE_TYPE_DISK = &H1
Const FILE_TYPE_CHAR = &H2
Const FILE_TYPE_PIPE = &H3
Const FILE_TYPE_REMOTE = &H8000

Const STD_INPUT_HANDLE = -10&
Const STD_OUTPUT_HANDLE = -11&
Const STD_ERROR_HANDLE = -12&

Const NOPARITY = 0
Const ODDPARITY = 1
Const EVENPARITY = 2
Const MARKPARITY = 3
Const SPACEPARITY = 4

Const ONESTOPBIT = 0
Const ONE5STOPBITS = 1
Const TWOSTOPBITS = 2

Const IGNORE = 0 '  Pasa por alto la seal
Const INFINITE = &HFFFF      '  Tiempo de espera infinito

' ndices de velocidad en baudios para comunicaciones
Const CBR_110 = 110
Const CBR_300 = 300
Const CBR_600 = 600
Const CBR_1200 = 1200
Const CBR_2400 = 2400
Const CBR_4800 = 4800
Const CBR_9600 = 9600
Const CBR_14400 = 14400
Const CBR_19200 = 19200
Const CBR_38400 = 38400
Const CBR_56000 = 56000
Const CBR_57600 = 57600
Const CBR_115200 = 115200
Const CBR_128000 = 128000
Const CBR_256000 = 256000

' Indicadores de error
Const CE_RXOVER = &H1                '  Desbordamiento de la cola de recepcin
Const CE_OVERRUN = &H2               '  Error de prdida de informacin por exceso de datos
Const CE_RXPARITY = &H4              '  Error de paridad de recepcin
Const CE_FRAME = &H8                 '  Error de trama de recepcin
Const CE_BREAK = &H10                '  Se ha detectado una seal de ruptura
Const CE_TXFULL = &H100              '  La cola de transferencia est llena
Const CE_PTO = &H200                 '  Excedido el tiempo de espera de LPTx
Const CE_IOE = &H400                 '  Error de E/S en LPTx
Const CE_DNS = &H800                 '  El dispositivo LPTx no est seleccionado
Const CE_OOP = &H1000                '  LPTx sin papel
Const CE_MODE = &H8000               '  Modo solicitado no admitido

Const IE_BADID = (-1)                '  Id. no vlido o no admitido
Const IE_OPEN = (-2)                 '  El dispositivo ya est abierto
Const IE_NOPEN = (-3)                '  El dispositivo no est abierto
Const IE_MEMORY = (-4)               '  Imposible asignar las colas
Const IE_DEFAULT = (-5)              '  Error en los parmetros predeterminados
Const IE_HARDWARE = (-10)            '  El hardware no est presente
Const IE_BYTESIZE = (-11)            '  Tamao de byte no admitido
Const IE_BAUDRATE = (-12)            '  Velocidad en baudios no admitida

' Eventos
Const EV_RXCHAR = &H1                '  Cualquier carcter recibido
Const EV_RXFLAG = &H2                '  Se ha recibido un carcter determinado
Const EV_TXEMPTY = &H4               '  Cola de transmisin vaca
Const EV_CTS = &H8                   '  Cambi el estado de Preparado para enviar (CTS)
Const EV_DSR = &H10                  '  Cambi el estado de Conjunto de datos preparado (DSR)
Const EV_RLSD = &H20                 '  Cambi el estado de Peticin de lnea para enviar datos (RLSD)
Const EV_BREAK = &H40                '  Se ha recibido una seal de ruptura
Const EV_ERR = &H80                  '  Error de estado de lnea
Const EV_RING = &H100                '  Se ha detectado una seal de llamada
Const EV_PERR = &H200                '  Se ha producido un error de impresora
Const EV_RX80FULL = &H400            '  El bfer de recepcin est lleno al 80%
Const EV_EVENT1 = &H800              '  Evento especfico del proveedor nm. 1
Const EV_EVENT2 = &H1000             '  Evento especfico del proveedor nm. 2

' Funciones de escape
Const SETXOFF = 1  '  Se ha recibido XOFF simulado
Const SETXON = 2   '  Se ha recibido XON simulado
Const SETRTS = 3   '  Establece RTS alta
Const CLRRTS = 4   '  Establece RTS baja
Const SETDTR = 5   '  Establece DTR alta
Const CLRDTR = 6   '  Establece DTR baja
Const RESETDEV = 7 '  Restablece el dispositivo, si es posible
Const SETBREAK = 8 '  Establece la lnea de ruptura del dispositivo
Const CLRBREAK = 9 '  Borra la lnea de ruptura del dispositivo

'  Indicadores de funcin PURGE.
Const PURGE_TXABORT = &H1     '  Destruye la escritura pendiente/activa al puerto de comunicaciones.
Const PURGE_RXABORT = &H2     '  Destruye la lectura pendiente/activa al puerto de comunicaciones.
Const PURGE_TXCLEAR = &H4     '  Destruye la cola de transmisin, si existe.
Const PURGE_RXCLEAR = &H8     '  Destruye el bfer de escritura anticipada, si existe.

Const LPTx = &H80        '  Establece si el Id. es para el dispositivo LPT

'  Indicadores de estado del mdem
Const MS_CTS_ON = &H10&
Const MS_DSR_ON = &H20&
Const MS_RING_ON = &H40&
Const MS_RLSD_ON = &H80&

' Constantes de WaitSoundState()
Const S_QUEUEEMPTY = 0
Const S_THRESHOLD = 1
Const S_ALLTHRESHOLD = 2

' Modos de acento
Const S_NORMAL = 0
Const S_LEGATO = 1
Const S_STACCATO = 2

' Orgenes de SetSoundNoise()
Const S_PERIOD512 = 0    '  Frec = tono alto N/512, silbido menos agudo
Const S_PERIOD1024 = 1   '  Frec = N/1024
Const S_PERIOD2048 = 2   '  Frec = tono bajo N/2048, silbido ms agudo
Const S_PERIODVOICE = 3  '  El origen es una frecuencia del canal de voz (3)
Const S_WHITE512 = 4     '  Frec = tono alto N/512, silbido menos agudo
Const S_WHITE1024 = 5    '  Frec = N/1024
Const S_WHITE2048 = 6    '  Frec = tono bajo N/2048, silbido ms agudo
Const S_WHITEVOICE = 7   '  El origen es una frecuencia del canal de voz (3)

Const S_SERDVNA = (-1)   '  El dispositivo no est disponible
Const S_SEROFM = (-2)    '  No hay suficiente memoria
Const S_SERMACT = (-3)   '  Msica activa
Const S_SERQFUL = (-4)   '  Cola llena
Const S_SERBDNT = (-5)   '  Nota no vlida
Const S_SERDLN = (-6)    '  Longitud de nota no vlida
Const S_SERDCC = (-7)    '  Recuento de notas no vlido
Const S_SERDTP = (-8)    '  Tiempo no vlido
Const S_SERDVL = (-9)    '  Volumen no vlido
Const S_SERDMD = (-10)   '  Modo no vlido
Const S_SERDSH = (-11)   '  Forma no vlida
Const S_SERDPT = (-12)   '  Tono no vlido
Const S_SERDFQ = (-13)   '  Frecuencia no vlida
Const S_SERDDR = (-14)   '  Duracin no vlida
Const S_SERDSR = (-15)   '  Origen no vlido
Const S_SERDST = (-16)   '  Estado no vlido

Const NMPWAIT_WAIT_FOREVER = &HFFFF
Const NMPWAIT_NOWAIT = &H1
Const NMPWAIT_USE_DEFAULT_WAIT = &H0
Const FS_CASE_IS_PRESERVED = FILE_CASE_PRESERVED_NAMES
Const FS_CASE_SENSITIVE = FILE_CASE_SENSITIVE_SEARCH
Const FS_UNICODE_STORED_ON_DISK = FILE_UNICODE_ON_DISK
Const FS_PERSISTENT_ACLS = FILE_PERSISTENT_ACLS

Const SECTION_QUERY = &H1
Const SECTION_MAP_WRITE = &H2
Const SECTION_MAP_READ = &H4
Const SECTION_MAP_EXECUTE = &H8
Const SECTION_EXTEND_SIZE = &H10
Const SECTION_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SECTION_QUERY Or SECTION_MAP_WRITE Or SECTION_MAP_READ Or SECTION_MAP_EXECUTE Or SECTION_EXTEND_SIZE

Const FILE_MAP_COPY = SECTION_QUERY
Const FILE_MAP_WRITE = SECTION_MAP_WRITE
Const FILE_MAP_READ = SECTION_MAP_READ
Const FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS

' Indicadores de OpenFile() 
Const OF_READ = &H0
Const OF_WRITE = &H1
Const OF_READWRITE = &H2
Const OF_SHARE_COMPAT = &H0
Const OF_SHARE_EXCLUSIVE = &H10
Const OF_SHARE_DENY_WRITE = &H20
Const OF_SHARE_DENY_READ = &H30
Const OF_SHARE_DENY_NONE = &H40
Const OF_PARSE = &H100
Const OF_DELETE = &H200
Const OF_VERIFY = &H400
Const OF_CANCEL = &H800
Const OF_CREATE = &H1000
Const OF_PROMPT = &H2000
Const OF_EXIST = &H4000
Const OF_REOPEN = &H8000

Const OFS_MAXPATHNAME = 128

' Estructura de OpenFile() 
Type OFSTRUCT
        cBytes As Byte
        fFixedDisk As Byte
        nErrCode As Integer
        Reserved1 As Integer
        Reserved2 As Integer
        szPathName(OFS_MAXPATHNAME) As Byte
End Type

Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Const PROCESSOR_INTEL_386 = 386
Const PROCESSOR_INTEL_486 = 486
Const PROCESSOR_INTEL_PENTIUM = 586
Const PROCESSOR_MIPS_R4000 = 4000
Const PROCESSOR_ALPHA_21064 = 21064
Const PROCESSOR_ARCHITECTURE_INTEL = 0
Const PROCESSOR_ARCHITECTURE_MIPS = 1
Const PROCESSOR_ARCHITECTURE_ALPHA = 2
Const PROCESSOR_ARCHITECTURE_PPC = 3
Const PROCESSOR_ARCHITECTURE_UNKNOWN = &hFFFF

Declare Function GetCurrentTime Lib "kernel32" Alias "GetTickCount" () As Long

' Indicadores para DrawFrameControl
Const DFC_CAPTION = 1
Const DFC_MENU = 2
Const DFC_SCROLL = 3
Const DFC_BUTTON = 4
Const DFCS_CAPTIONCLOSE = &H0
Const DFCS_CAPTIONMIN = &H1
Const DFCS_CAPTIONMAX = &H2
Const DFCS_CAPTIONRESTORE = &H3
Const DFCS_CAPTIONHELP = &H4
Const DFCS_MENUARROW = &H0
Const DFCS_MENUCHECK = &H1
Const DFCS_MENUBULLET = &H2
Const DFCS_MENUARROWRIGHT = &H4
Const DFCS_SCROLLUP = &H0
Const DFCS_SCROLLDOWN = &H1
Const DFCS_SCROLLLEFT = &H2
Const DFCS_SCROLLRIGHT = &H3
Const DFCS_SCROLLCOMBOBOX = &H5
Const DFCS_SCROLLSIZEGRIP = &H8
Const DFCS_SCROLLSIZEGRIPRIGHT = &H10
Const DFCS_BUTTONCHECK = &H0
Const DFCS_BUTTONRADIOIMAGE = &H1
Const DFCS_BUTTONRADIOMASK = &H2
Const DFCS_BUTTONRADIO = &H4
Const DFCS_BUTTON3STATE = &H8
Const DFCS_BUTTONPUSH = &H10
Const DFCS_INACTIVE = &H100
Const DFCS_PUSHED = &H200
Const DFCS_CHECKED = &H400
Const DFCS_ADJUSTRECT = &H2000
Const DFCS_FLAT = &H4000
Const DFCS_MONO = &H8000

Declare Function InterlockedIncrement Lib "kernel32" Alias "InterlockedIncrement" (lpAddend As Long) As Long
Declare Function InterlockedDecrement Lib "kernel32" Alias "InterlockedDecrement" (lpAddend As Long) As Long
Declare Function InterlockedExchange Lib "kernel32" Alias "InterlockedExchange" (Target As Long, ByVal Value As Long) As Long

' Rutinas del cargador
Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long

Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

Declare Function SetProcessShutdownParameters Lib "kernel32" Alias "SetProcessShutdownParameters" (ByVal dwLevel As Long, ByVal dwFlags As Long) As Long
Declare Function GetProcessShutdownParameters Lib "kernel32" Alias "GetProcessShutdownParameters" (lpdwLevel As Long, lpdwFlags As Long) As Long

Declare Sub FatalAppExit Lib "kernel32" Alias "FatalAppExitA" (ByVal uAction As Long, ByVal lpMessageText As String)
Declare Sub GetStartupInfo Lib "kernel32" Alias "GetStartupInfoA" (lpStartupInfo As STARTUPINFO)
Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As String
Declare Function GetEnvironmentVariable Lib "kernel32" Alias "GetEnvironmentVariableA" (ByVal lpName As String, ByVal lpBuffer As String, ByVal nSize As Long) As Long
Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As Long
Declare Function ExpandEnvironmentStrings Lib "kernel32" Alias "ExpandEnvironmentStringsA" (ByVal lpSrc As String, ByVal lpDst As String, ByVal nSize As Long) As Long

Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Declare Function LoadLibraryEx Lib "kernel32" Alias "LoadLibraryExA" (ByVal lpLibFileName As String, ByVal hFile As Long, ByVal dwFlags As Long) As Long

Const DONT_RESOLVE_DLL_REFERENCES = &H1

Declare Function LoadModule Lib "kernel32" Alias "LoadModule" (ByVal lpModuleName As String, lpParameterBlock As Any) As Long
Declare Function FreeLibrary Lib "kernel32" Alias "FreeLibrary" (ByVal hLibModule As Long) As Long
Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long

Declare Sub DebugBreak Lib "kernel32" Alias "DebugBreak" ()
Declare Function ContinueDebugEvent Lib "kernel32" Alias "ContinueDebugEvent" (ByVal dwProcessId As Long, ByVal dwThreadId As Long, ByVal dwContinueStatus As Long) As Long
Declare Function DebugActiveProcess Lib "kernel32" Alias "DebugActiveProcess" (ByVal dwProcessId As Long) As Long

Type CRITICAL_SECTION
	dummy As Long
End Type

Declare Sub InitializeCriticalSection Lib "kernel32" Alias "InitializeCriticalSection" (lpCriticalSection As CRITICAL_SECTION)

Declare Sub EnterCriticalSection Lib "kernel32" Alias "EnterCriticalSection" (lpCriticalSection As CRITICAL_SECTION)
Declare Sub LeaveCriticalSection Lib "kernel32" Alias "LeaveCriticalSection" (lpCriticalSection As CRITICAL_SECTION)
Declare Sub DeleteCriticalSection Lib "kernel32" Alias "DeleteCriticalSection" (lpCriticalSection As CRITICAL_SECTION)
Declare Function SetEvent Lib "kernel32" Alias "SetEvent" (ByVal hEvent As Long) As Long
Declare Function ResetEvent Lib "kernel32" Alias "ResetEvent" (ByVal hEvent As Long) As Long
Declare Function PulseEvent Lib "kernel32" Alias "PulseEvent" (ByVal hEvent As Long) As Long
Declare Function ReleaseSemaphore Lib "kernel32" Alias "ReleaseSemaphore" (ByVal hSemaphore As Long, ByVal lReleaseCount As Long, lpPreviousCount As Long) As Long
Declare Function ReleaseMutex Lib "kernel32" Alias "ReleaseMutex" (ByVal hMutex As Long) As Long
Declare Function WaitForSingleObject Lib "kernel32" Alias "WaitForSingleObject" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Declare Function WaitForMultipleObjects Lib "kernel32" Alias "WaitForMultipleObjects" (ByVal nCount As Long, lpHandles As Long, ByVal bWaitAll As Long, ByVal dwMilliseconds As Long) As Long
Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
Declare Sub OutputDebugString Lib "kernel32" Alias "OutputDebugStringA" (ByVal lpOutputString As String)
Declare Function GetVersion Lib "kernel32" Alias "GetVersion" () As Long

Declare Function OpenFile Lib "kernel32" Alias "OpenFile" (ByVal lpFileName As String, lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long

' Indicadores de GetTempFileName()
'
Const TF_FORCEDRIVE = &H80

Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
Declare Function SetHandleCount Lib "kernel32" Alias "SetHandleCount" (ByVal wNumber As Long) As Long
Declare Function GetLogicalDrives Lib "kernel32" Alias "GetLogicalDrives" () As Long
Declare Function LockFile Lib "kernel32" Alias "LockFile" (ByVal hFile As Long, ByVal dwFileOffsetLow As Long, ByVal dwFileOffsetHigh As Long, ByVal nNumberOfBytesToLockLow As Long, ByVal nNumberOfBytesToLockHigh As Long) As Long
Declare Function UnlockFile Lib "kernel32" Alias "UnlockFile" (ByVal hFile As Long, ByVal dwFileOffsetLow As Long, ByVal dwFileOffsetHigh As Long, ByVal nNumberOfBytesToUnlockLow As Long, ByVal nNumberOfBytesToUnlockHigh As Long) As Long
Declare Function LockFileEx Lib "kernel32" Alias "LockFileEx" (ByVal hFile As Long, ByVal dwFlags As Long, ByVal dwReserved As Long, ByVal nNumberOfBytesToLockLow As Long, ByVal nNumberOfBytesToLockHigh As Long, lpOverlapped As OVERLAPPED) As Long

Const LOCKFILE_FAIL_IMMEDIATELY = &H1
Const LOCKFILE_EXCLUSIVE_LOCK = &H2

Declare Function UnlockFileEx Lib "kernel32" Alias "UnlockFileEx" (ByVal hFile As Long, ByVal dwReserved As Long, ByVal nNumberOfBytesToUnlockLow As Long, ByVal nNumberOfBytesToUnlockHigh As Long, lpOverlapped As OVERLAPPED) As Long

Type BY_HANDLE_FILE_INFORMATION
        dwFileAttributes As Long
        ftCreationTime As FILETIME
        ftLastAccessTime As FILETIME
        ftLastWriteTime As FILETIME
        dwVolumeSerialNumber As Long
        nFileSizeHigh As Long
        nFileSizeLow As Long
        nNumberOfLinks As Long
        nFileIndexHigh As Long
        nFileIndexLow As Long
End Type

Declare Function GetFileInformationByHandle Lib "kernel32" Alias "GetFileInformationByHandle" (ByVal hFile As Long, lpFileInformation As BY_HANDLE_FILE_INFORMATION) As Long
Declare Function GetFileType Lib "kernel32" Alias "GetFileType" (ByVal hFile As Long) As Long
Declare Function GetFileSize Lib "kernel32" Alias "GetFileSize" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Declare Function GetStdHandle Lib "kernel32" Alias "GetStdHandle" (ByVal nStdHandle As Long) As Long
Declare Function SetStdHandle Lib "kernel32" Alias "SetStdHandle" (ByVal nStdHandle As Long, ByVal nHandle As Long) As Long
Declare Function WriteFile Lib "kernel32" Alias "WriteFile" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As OVERLAPPED) As Long
Declare Function ReadFile Lib "kernel32" Alias "ReadFile" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long
Declare Function FlushFileBuffers Lib "kernel32" Alias "FlushFileBuffers" (ByVal hFile As Long) As Long
Declare Function DeviceIoControl Lib "kernel32" Alias "DeviceIoControl" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped As OVERLAPPED) As Long
Declare Function SetEndOfFile Lib "kernel32" Alias "SetEndOfFile" (ByVal hFile As Long) As Long
Declare Function SetFilePointer Lib "kernel32" Alias "SetFilePointer" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Declare Function FindClose Lib "kernel32" Alias "FindClose" (ByVal hFindFile As Long) As Long
Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Declare Function SetFileTime Lib "kernel32" Alias "SetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Long) As Long
Declare Function DuplicateHandle Lib "kernel32" Alias "DuplicateHandle" (ByVal hSourceProcessHandle As Long, ByVal hSourceHandle As Long, ByVal hTargetProcessHandle As Long, lpTargetHandle As Long, ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwOptions As Long) As Long

Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

Declare Function GlobalAlloc Lib "kernel32" Alias "GlobalAlloc" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Declare Function GlobalFree Lib "kernel32" Alias "GlobalFree" (ByVal hMem As Long) As Long
Declare Function GlobalHandle Lib "kernel32" Alias "GlobalHandle" (wMem As Any) As Long
Declare Function GlobalLock Lib "kernel32" Alias "GlobalLock" (ByVal hMem As Long) As Long
Declare Function GlobalReAlloc Lib "kernel32" Alias "GlobalReAlloc" (ByVal hMem As Long, ByVal dwBytes As Long, ByVal wFlags As Long) As Long

Declare Function GlobalSize Lib "kernel32" Alias "GlobalSize" (ByVal hMem As Long) As Long
Declare Function GlobalUnlock Lib "kernel32" Alias "GlobalUnlock" (ByVal hMem As Long) As Long
Declare Function GlobalFlags Lib "kernel32" Alias "GlobalFlags" (ByVal hMem As Long) As Long
Declare Sub GlobalMemoryStatus Lib "kernel32" Alias "GlobalMemoryStatus" (lpBuffer As MEMORYSTATUS)

Const LNOTIFY_OUTOFMEM = 0
Const LNOTIFY_MOVE = 1
Const LNOTIFY_DISCARD = 2

Declare Function LocalAlloc Lib "kernel32" Alias "LocalAlloc" (ByVal wFlags As Long, ByVal wBytes As Long) As Long
Declare Function LocalFree Lib "kernel32" Alias "LocalFree" (ByVal hMem As Long) As Long
Declare Function LocalHandle Lib "kernel32" Alias "LocalHandle" (wMem As Any) As Long
Declare Function LocalLock Lib "kernel32" Alias "LocalLock" (ByVal hMem As Long) As Long
Declare Function LocalReAlloc Lib "kernel32" Alias "LocalReAlloc" (ByVal hMem As Long, ByVal wBytes As Long, ByVal wFlags As Long) As Long

Declare Function LocalSize Lib "kernel32" Alias "LocalSize" (ByVal hMem As Long) As Long
Declare Function LocalUnlock Lib "kernel32" Alias "LocalUnlock" (ByVal hMem As Long) As Long
Declare Function LocalFlags Lib "kernel32" Alias "LocalFlags" (ByVal hMem As Long) As Long

Type MEMORY_BASIC_INFORMATION
     BaseAddress as Long
     AllocationBase as Long
     AllocationProtect As Long
     RegionSize As Long
     State As Long
     Protect As Long
     lType As Long
End Type

Declare Function FlushInstructionCache Lib "kernel32" Alias "FlushInstructionCache" (ByVal hProcess As Long, lpBaseAddress As Any, ByVal dwSize As Long) As Long
Declare Function VirtualAlloc Lib "kernel32" Alias "VirtualAlloc" (lpAddress As Any, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Declare Function VirtualFree Lib "kernel32" Alias "VirtualFree" (lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Declare Function VirtualProtect Lib "kernel32" Alias "VirtualProtect" (lpAddress As Any, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
Declare Function VirtualQuery Lib "kernel32" Alias "VirtualQuery" (lpAddress As Any, lpBuffer As MEMORY_BASIC_INFORMATION, ByVal dwLength As Long) As Long
Declare Function VirtualProtectEx Lib "kernel32" Alias "VirtualProtectEx" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
Declare Function VirtualQueryEx Lib "kernel32" Alias "VirtualQueryEx" (ByVal hProcess As Long, lpAddress As Any, lpBuffer As MEMORY_BASIC_INFORMATION, ByVal dwLength As Long) As Long
Declare Function HeapCreate Lib "kernel32" Alias "HeapCreate" (ByVal flOptions As Long, ByVal dwInitialSize As Long, ByVal dwMaximumSize As Long) As Long
Declare Function HeapDestroy Lib "kernel32" Alias "HeapDestroy" (ByVal hHeap As Long) As Long
Declare Function HeapAlloc Lib "kernel32" Alias "HeapAlloc" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Declare Function HeapReAlloc Lib "kernel32" Alias "HeapReAlloc" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any, ByVal dwBytes As Long) As Long
Declare Function HeapFree Lib "kernel32" Alias "HeapFree" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
Declare Function HeapSize Lib "kernel32" Alias "HeapSize" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
Declare Function GetProcessHeap Lib "kernel32" Alias "GetProcessHeap" () As Long
Declare Function GetProcessTimes Lib "kernel32" Alias "GetProcessTimes" (ByVal hProcess As Long, lpCreationTime As FILETIME, lpExitTime As FILETIME, lpKernelTime As FILETIME, lpUserTime As FILETIME) As Long
Declare Function OpenProcess Lib "kernel32" Alias "OpenProcess" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function GetCurrentProcess Lib "kernel32" Alias "GetCurrentProcess" () As Long
Declare Function GetCurrentProcessId Lib "kernel32" Alias "GetCurrentProcessId" () As Long
Declare Sub ExitProcess Lib "kernel32" Alias "ExitProcess" (ByVal uExitCode As Long)
Declare Function TerminateProcess Lib "kernel32" Alias "TerminateProcess" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Declare Function GetExitCodeProcess Lib "kernel32" Alias "GetExitCodeProcess" (ByVal hProcess As Long, lpExitCode As Long) As Long

Declare Function GetLastError Lib "kernel32" Alias "GetLastError" () As Long
Declare Sub SetLastError Lib "kernel32" Alias "SetLastError" (ByVal dwErrCode As Long)

Const SLE_ERROR = &H1
Const SLE_MINORERROR = &H2
Const SLE_WARNING = &H3

Declare Sub SetLastErrorEx Lib "user32" Alias "SetLastErrorEx" (ByVal dwErrCode As Long, ByVal dwType As Long)
Declare Function GetOverlappedResult Lib "kernel32" Alias "GetOverlappedResult" (ByVal hFile As Long, lpOverlapped As OVERLAPPED, lpNumberOfBytesTransferred As Long, ByVal bWait As Long) As Long

Const SEM_FAILCRITICALERRORS = &H1
Const SEM_NOGPFAULTERRORBOX = &H2
Const SEM_NOOPENFILEERRORBOX = &H8000

Declare Sub SetDebugErrorLevel Lib "user32" Alias "SetDebugErrorLevel" (ByVal dwLevel As Long)
Declare Function SetErrorMode Lib "kernel32" Alias "SetErrorMode" (ByVal wMode As Long) As Long

Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Declare Function WriteProcessMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Declare Function GetThreadContext Lib "kernel32" Alias "GetThreadContext" (ByVal hThread As Long, lpContext As CONTEXT) As Long
Declare Function SetThreadContext Lib "kernel32" Alias "SetThreadContext" (ByVal hThread As Long, lpContext As CONTEXT) As Long
Declare Function SuspendThread Lib "kernel32" Alias "SuspendThread" (ByVal hThread As Long) As Long
Declare Function ResumeThread Lib "kernel32" Alias "ResumeThread" (ByVal hThread As Long) As Long

Declare Function FindResource Lib "kernel32" Alias "FindResourceA" (ByVal hInstance As Long, ByVal lpName As String, ByVal lpType As String) As Long
Declare Function FindResourceEx Lib "kernel32" Alias "FindResourceExA" (ByVal hModule As Long, ByVal lpType As String, ByVal lpName As String, ByVal wLanguage As Long) As Long
Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources As Long) As Long
Declare Function UpdateResource Lib "kernel32" Alias "UpdateResourceA" (ByVal hUpdate As Long, ByVal lpType As String, ByVal lpName As String, ByVal wLanguage As Long, lpData As Any, ByVal cbData As Long) As Long
Declare Function EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (ByVal hUpdate As Long, ByVal fDiscard As Long) As Long
Declare Function LoadResource Lib "kernel32" Alias "LoadResource" (ByVal hInstance As Long, ByVal hResInfo As Long) As Long
Declare Function LockResource Lib "kernel32" Alias "LockResource" (ByVal hResData As Long) As Long
Declare Function SizeofResource Lib "kernel32" Alias "SizeofResource" (ByVal hInstance As Long, ByVal hResInfo As Long) As Long

' Tipos de recursos predefinidos
Const RT_CURSOR = 1&
Const RT_BITMAP = 2&
Const RT_ICON = 3&
Const RT_MENU = 4&
Const RT_DIALOG = 5&
Const RT_STRING = 6&
Const RT_FONTDIR = 7&
Const RT_FONT = 8&
Const RT_ACCELERATOR = 9&
Const RT_RCDATA = 10&

Declare Function InitAtomTable Lib "kernel32" Alias "InitAtomTable" (ByVal nSize As Long) As Long
Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (ByVal lpString As String) As Integer
Declare Function GlobalDeleteAtom Lib "kernel32" Alias "GlobalDeleteAtom" (ByVal nAtom As Integer) As Integer
Declare Function GlobalFindAtom Lib "kernel32" Alias "GlobalFindAtomA" (ByVal lpString As String) As Integer
Declare Function GlobalGetAtomName Lib "kernel32" Alias "GlobalGetAtomNameA" (ByVal nAtom As Integer, ByVal lpBuffer As String, ByVal nSize As Long) As Long

' Rutinas del perfil de user
' NOTA: El argumento lpKeyName para GetProfileString, WriteProfileString,
'       GetPrivateProfileString y WritePrivateProfileString puede ser una cadena
'       o NULL. Por eso, el argumento se define con "As Any".
'          Por ejemplo, para pasar una cadena especifique   ByVal "tapiz"
'          Para pasar NULL especifique                      ByVal 0&
'       Tambin puede pasar NULL para el argumento lpString de WriteProfileString
'       y WritePrivateProfileString
Declare Function GetProfileInt Lib "kernel32" Alias "GetProfileIntA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal nDefault As Long) As Long

Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long

Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long

Declare Function GetProfileSection Lib "kernel32" Alias "GetProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long
Declare Function WriteProfileSection Lib "kernel32" Alias "WriteProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String) As Long
Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long

Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long

Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
Declare Function GetCurrentDirectory Lib "kernel32" Alias "GetCurrentDirectory" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long
Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Declare Function CreateDirectoryEx Lib "kernel32" Alias "CreateDirectoryExA" (ByVal lpTemplateDirectory As String, ByVal lpNewDirectory As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long
Declare Function GetFullPathName Lib "kernel32" Alias "GetFullPathNameA" (ByVal lpFileName As String, ByVal nBufferLength As Long, ByVal lpBuffer As String, ByVal lpFilePart As String) As Long

Const DDD_RAW_TARGET_PATH = &H1
Const DDD_REMOVE_DEFINITION = &H2
Const DDD_EXACT_MATCH_ON_REMOVE = &H4

Const MAX_PATH = 260

Declare Function DefineDosDevice Lib "kernel32" Alias "DefineDosDeviceA" (ByVal dwFlags As Long, ByVal lpDeviceName As String, ByVal lpTargetPath As String) As Long
Declare Function QueryDosDevice Lib "kernel32" Alias "QueryDosDeviceA" (ByVal lpDeviceName As String, ByVal lpTargetPath As String, ByVal ucchMax As Long) As Long
Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long
Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Declare Function SearchPath Lib "kernel32" Alias "SearchPathA" (ByVal lpPath As String, ByVal lpFileName As String, ByVal lpExtension As String, ByVal nBufferLength As Long, ByVal lpBuffer As String, ByVal lpFilePart As String) As Long
Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
Declare Function MoveFile Lib "kernel32" Alias "MoveFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long
Declare Function MoveFileEx Lib "kernel32" Alias "MoveFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long) As Long

Const MOVEFILE_REPLACE_EXISTING = &H1
Const MOVEFILE_COPY_ALLOWED = &H2
Const MOVEFILE_DELAY_UNTIL_REBOOT = &H4

Type EVENTLOGRECORD
     Length as Long           '  Longitud del registro lleno
     Reserved as Long         '  Usado por el servicio
     RecordNumber as Long     '  Nmero de registro absoluto
     TimeGenerated as Long    '  Segundos desde 1-1-1970
     TimeWritten as Long      '  Segundos desde 1-1-1970
     EventID as Long
     EventType as Integer
     NumStrings as Integer
     EventCategory as Integer
     ReservedFlags as Integer     '  Para usarlo con eventos en pares (consultas)
     ClosingRecordNumber as Long  '  Para usarlo con eventos en pares (auditora)
     StringOffset as Long         '  Desplazamiento desde el comienzo del registro
     UserSidLength as Long
     UserSidOffset as Long
     DataLength as Long
     DataOffset as Long     '  Desplazamiento desde el comienzo del registro
End Type

Declare Function CreateNamedPipe Lib "kernel32" Alias "CreateNamedPipeA" (ByVal lpName As String, ByVal dwOpenMode As Long, ByVal dwPipeMode As Long, ByVal nMaxInstances As Long, ByVal nOutBufferSize As Long, ByVal nInBufferSize As Long, ByVal nDefaultTimeOut As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Declare Function GetNamedPipeHandleState Lib "kernel32" Alias "GetNamedPipeHandleStateA" (ByVal hNamedPipe As Long, lpState As Long, lpCurInstances As Long, lpMaxCollectionCount As Long, lpCollectDataTimeout As Long, ByVal lpUserName As String, ByVal nMaxUserNameSize As Long) As Long
Declare Function CallNamedPipe Lib "kernel32" Alias "CallNamedPipeA" (ByVal lpNamedPipeName As String, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesRead As Long, ByVal nTimeOut As Long) As Long
Declare Function WaitNamedPipe Lib "kernel32" Alias "WaitNamedPipeA" (ByVal lpNamedPipeName As String, ByVal nTimeOut As Long) As Long
Declare Function SetVolumeLabel Lib "kernel32" Alias "SetVolumeLabelA" (ByVal lpRootPathName As String, ByVal lpVolumeName As String) As Long
Declare Sub SetFileApisToOEM Lib "kernel32" Alias "SetFileApisToOEM" ()
Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Declare Function ClearEventLog Lib "advapi32.dll" Alias "ClearEventLogA" (ByVal hEventLog As Long, ByVal lpBackupFileName As String) As Long
Declare Function BackupEventLog Lib "advapi32.dll" Alias "BackupEventLogA" (ByVal hEventLog As Long, ByVal lpBackupFileName As String) As Long
Declare Function CloseEventLog Lib "advapi32.dll" Alias "CloseEventLog" (ByVal hEventLog As Long) As Long
Declare Function DeregisterEventSource Lib "advapi32.dll" Alias "DeregisterEventSource" (ByVal hEventLog As Long) As Long
Declare Function GetNumberOfEventLogRecords Lib "advapi32.dll" Alias "GetNumberOfEventLogRecords" (ByVal hEventLog As Long, NumberOfRecords As Long) As Long
Declare Function GetOldestEventLogRecord Lib "advapi32.dll" Alias "GetOldestEventLogRecord" (ByVal hEventLog As Long, OldestRecord As Long) As Long
Declare Function OpenEventLog Lib "advapi32.dll" Alias "OpenEventLogA" (ByVal lpUNCServerName As String, ByVal lpSourceName As String) As Long
Declare Function RegisterEventSource Lib "advapi32.dll" Alias "RegisterEventSourceA" (ByVal lpUNCServerName As String, ByVal lpSourceName As String) As Long
Declare Function OpenBackupEventLog Lib "advapi32.dll" Alias "OpenBackupEventLogA" (ByVal lpUNCServerName As String, ByVal lpFileName As String) As Long
Declare Function ReadEventLog Lib "advapi32.dll" Alias "ReadEventLogA" (ByVal hEventLog As Long, ByVal dwReadFlags As Long, ByVal dwRecordOffset As Long, lpBuffer As EVENTLOGRECORD, ByVal nNumberOfBytesToRead As Long, pnBytesRead As Long, pnMinNumberOfBytesNeeded As Long) As Long
Declare Function ReportEvent Lib "advapi32.dll" Alias "ReportEventA" (ByVal hEventLog As Long, ByVal wType As Long, ByVal wCategory As Long, ByVal dwEventID As Long, lpUserSid As Any, ByVal wNumStrings As Long, ByVal dwDataSize As Long, ByVal lpStrings As Long, lpRawData As Any) As Long

' API de seguridad
Const TokenUser = 1
Const TokenGroups = 2
Const TokenPrivileges = 3
Const TokenOwner = 4
Const TokenPrimaryGroup = 5
Const TokenDefaultDacl = 6
Const TokenSource = 7
Const TokenType = 8
Const TokenImpersonationLevel = 9
Const TokenStatistics = 10

Type TOKEN_GROUPS
    GroupCount As Long
    Groups(ANYSIZE_ARRAY) As SID_AND_ATTRIBUTES
End Type

Declare Function DuplicateToken Lib "advapi32.dll" Alias "DuplicateToken" (ByVal ExistingTokenHandle As Long, ImpersonationLevel As Integer, DuplicateTokenHandle As Long) As Long
Declare Function GetKernelObjectSecurity Lib "advapi32.dll" Alias "GetKernelObjectSecurity" (ByVal Handle As Long, ByVal RequestedInformation As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR, ByVal nLength As Long, lpnLengthNeeded As Long) As Long
Declare Function ImpersonateNamedPipeClient Lib "advapi32.dll" Alias "ImpersonateNamedPipeClient" (ByVal hNamedPipe As Long) As Long
Declare Function ImpersonateSelf Lib "advapi32.dll" Alias "ImpersonateSelf" (ImpersonationLevel As Integer) As Long
Declare Function RevertToSelf Lib "advapi32.dll" Alias "RevertToSelf" () As Long
Declare Function AccessCheck Lib "advapi32.dll" Alias "AccessCheck" (pSecurityDescriptor As SECURITY_DESCRIPTOR, ByVal ClientToken As Long, ByVal DesiredAccess As Long, GenericMapping As GENERIC_MAPPING, PrivilegeSet As PRIVILEGE_SET, PrivilegeSetLength As Long, GrantedAccess As Long, ByVal Status As Long) As Long

Type TOKEN_PRIVILEGES
	PrivilegeCount As Long
	Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type

Declare Function OpenProcessToken Lib "advapi32.dll" Alias "OpenProcessToken" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Declare Function OpenThreadToken Lib "advapi32.dll" Alias "OpenThreadToken" (ByVal ThreadHandle As Long, ByVal DesiredAccess As Long, ByVal OpenAsSelf As Long, TokenHandle As Long) As Long

Declare Function GetTokenInformation Lib "advapi32.dll" Alias "GetTokenInformation" (ByVal TokenHandle As Long, TokenInformationClass As Integer, TokenInformation As Any, ByVal TokenInformationLength As Long, ReturnLength As Long) As Long
Declare Function SetTokenInformation Lib "advapi32.dll" Alias "SetTokenInformation" (ByVal TokenHandle As Long, TokenInformationClass As Integer, TokenInformation As Any, ByVal TokenInformationLength As Long) As Long
Declare Function AdjustTokenPrivileges Lib "advapi32.dll" Alias "AdjustTokenPrivileges" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Declare Function AdjustTokenGroups Lib "advapi32.dll" Alias "AdjustTokenGroups" (ByVal TokenHandle As Long, ByVal ResetToDefault As Long, NewState As TOKEN_GROUPS, ByVal BufferLength As Long, PreviousState As TOKEN_GROUPS, ReturnLength As Long) As Long
Declare Function PrivilegeCheck Lib "advapi32.dll" Alias "PrivilegeCheck" (ByVal ClientToken As Long, RequiredPrivileges As PRIVILEGE_SET, ByVal pfResult As Long) As Long
Declare Function AccessCheckAndAuditAlarm Lib "advapi32.dll" Alias "AccessCheckAndAuditAlarmA" (ByVal SubsystemName As String, HandleId As Any, ByVal ObjectTypeName As String, ByVal ObjectName As String, SecurityDescriptor As SECURITY_DESCRIPTOR, ByVal DesiredAccess As Long, GenericMapping As GENERIC_MAPPING, ByVal ObjectCreation As Long, GrantedAccess As Long, ByVal AccessStatus As Long, ByVal pfGenerateOnClose As Long) As Long
Declare Function ObjectOpenAuditAlarm Lib "kernel32" Alias "ObjectOpenAuditAlarmA" (ByVal SubsystemName As String, HandleId As Any, ByVal ObjectTypeName As String, ByVal ObjectName As String, pSecurityDescriptor As SECURITY_DESCRIPTOR, ByVal ClientToken As Long, ByVal DesiredAccess As Long, ByVal GrantedAccess As Long, Privileges As PRIVILEGE_SET, ByVal ObjectCreation As Long, ByVal AccessGranted As Long, ByVal GenerateOnClose As Long) As Long
Declare Function ObjectPrivilegeAuditAlarm Lib "advapi32.dll" Alias "ObjectPrivilegeAuditAlarmA" (ByVal SubsystemName As String, HandleId As Any, ByVal ClientToken As Long, ByVal DesiredAccess As Long, Privileges As PRIVILEGE_SET, ByVal AccessGranted As Long) As Long
Declare Function ObjectCloseAuditAlarm Lib "advapi32.dll" Alias "ObjectCloseAuditAlarmA" (ByVal SubsystemName As String, HandleId As Any, ByVal GenerateOnClose As Long) As Long
Declare Function PrivilegedServiceAuditAlarm Lib "advapi32.dll" Alias "PrivilegedServiceAuditAlarmA" (ByVal SubsystemName As String, ByVal ServiceName As String, ByVal ClientToken As Long, Privileges As PRIVILEGE_SET, ByVal AccessGranted As Long) As Long
Declare Function IsValidSid Lib "advapi32.dll" Alias "IsValidSid" (pSid As Any) As Long
Declare Function EqualSid Lib "advapi32.dll" Alias "EqualSid" (pSid1 As Any, pSid2 As Any) As Long
Declare Function EqualPrefixSid Lib "advapi32.dll" Alias "EqualPrefixSid" (pSid1 As Any, pSid2 As Any) As Long
Declare Function GetSidLengthRequired Lib "advapi32.dll" Alias "GetSidLengthRequired" (ByVal nSubAuthorityCount As Byte) As Long
Declare Function AllocateAndInitializeSid Lib "advapi32.dll" Alias "AllocateAndInitializeSid" (pIdentifierAuthority As SID_IDENTIFIER_AUTHORITY, ByVal nSubAuthorityCount As Byte, ByVal nSubAuthority0 As Long, ByVal nSubAuthority1 As Long, ByVal nSubAuthority2 As Long, ByVal nSubAuthority3 As Long, ByVal nSubAuthority4 As Long, ByVal nSubAuthority5 As Long, ByVal nSubAuthority6 As Long, ByVal nSubAuthority7 As Long, lpPSid As Long) As Long
Declare Sub FreeSid Lib "advapi32.dll" Alias "FreeSid" (pSid As Any)
Declare Function InitializeSid Lib "advapi32.dll" Alias "InitializeSid" (Sid As Any, pIdentifierAuthority As SID_IDENTIFIER_AUTHORITY, ByVal nSubAuthorityCount As Byte) As Long
Declare Function GetSidIdentifierAuthority Lib "advapi32.dll" Alias "GetSidIdentifierAuthority" (pSid As Any) As SID_IDENTIFIER_AUTHORITY
Declare Function GetSidSubAuthority Lib "advapi32.dll" Alias "GetSidSubAuthority" (pSid As Any, ByVal nSubAuthority As Long) As Long
Declare Function GetSidSubAuthorityCount Lib "advapi32.dll" Alias "GetSidSubAuthorityCount" (pSid As Any) As Byte
Declare Function GetLengthSid Lib "advapi32.dll" Alias "GetLengthSid" (pSid As Any) As Long
Declare Function CopySid Lib "advapi32.dll" Alias "CopySid" (ByVal nDestinationSidLength As Long, pDestinationSid As Any, pSourceSid As Any) As Long
Declare Function AreAllAccessesGranted Lib "advapi32.dll" Alias "AreAllAccessesGranted" (ByVal GrantedAccess As Long, ByVal DesiredAccess As Long) As Long
Declare Function AreAnyAccessesGranted Lib "advapi32.dll" Alias "AreAnyAccessesGranted" (ByVal GrantedAccess As Long, ByVal DesiredAccess As Long) As Long
Declare Sub MapGenericMask Lib "advapi32.dll" Alias "MapGenericMask" (AccessMask As Long, GenericMapping As GENERIC_MAPPING)
Declare Function IsValidAcl Lib "advapi32.dll" Alias "IsValidAcl" (pAcl As ACL) As Long
Declare Function InitializeAcl Lib "advapi32.dll" Alias "InitializeAcl" (pAcl As ACL, ByVal nAclLength As Long, ByVal dwAclRevision As Long) As Long
Declare Function GetAclInformation Lib "advapi32.dll" Alias "GetAclInformation" (pAcl As ACL, pAclInformation As Any, ByVal nAclInformationLength As Long, ByVal dwAclInformationClass As Integer) As Long
Declare Function SetAclInformation Lib "advapi32.dll" Alias "SetAclInformation" (pAcl As ACL, pAclInformation As Any, ByVal nAclInformationLength As Long, ByVal dwAclInformationClass As Integer) As Long
Declare Function AddAce Lib "advapi32.dll" Alias "AddAce" (pAcl As ACL, ByVal dwAceRevision As Long, ByVal dwStartingAceIndex As Long, pAceList As Any, ByVal nAceListLength As Long) As Long
Declare Function DeleteAce Lib "advapi32.dll" Alias "DeleteAce" (pAcl As ACL, ByVal dwAceIndex As Long) As Long
Declare Function GetAce Lib "advapi32.dll" Alias "GetAce" (pAcl As ACL, ByVal dwAceIndex As Long, pAce As Any) As Long
Declare Function AddAccessAllowedAce Lib "advapi32.dll" Alias "AddAccessAllowedAce" (pAcl As ACL, ByVal dwAceRevision As Long, ByVal AccessMask As Long, pSid As Any) As Long
Declare Function AddAccessDeniedAce Lib "advapi32.dll" Alias "AddAccessDeniedAce" (pAcl As ACL, ByVal dwAceRevision As Long, ByVal AccessMask As Long, pSid As Any) As Long
Declare Function AddAuditAccessAce Lib "advapi32.dll" Alias "AddAuditAccessAce" (pAcl As ACL, ByVal dwAceRevision As Long, ByVal dwAccessMask As Long, pSid As Any, ByVal bAuditSuccess As Long, ByVal bAuditFailure As Long) As Long
Declare Function FindFirstFreeAce Lib "advapi32.dll" Alias "FindFirstFreeAce" (pAcl As ACL, pAce As Long) As Long
Declare Function InitializeSecurityDescriptor Lib "advapi32.dll" Alias "InitializeSecurityDescriptor" (pSecurityDescriptor As SECURITY_DESCRIPTOR, ByVal dwRevision As Long) As Long
Declare Function IsValidSecurityDescriptor Lib "advapi32.dll" Alias "IsValidSecurityDescriptor" (pSecurityDescriptor As SECURITY_DESCRIPTOR) As Long
Declare Function GetSecurityDescriptorLength Lib "advapi32.dll" Alias "GetSecurityDescriptorLength" (pSecurityDescriptor As SECURITY_DESCRIPTOR) As Long

Declare Function GetSecurityDescriptorControl Lib "advapi32.dll" Alias "GetSecurityDescriptorControl" (pSecurityDescriptor As SECURITY_DESCRIPTOR, pControl As Integer, lpdwRevision As Long) As Long
Declare Function SetSecurityDescriptorDacl Lib "advapi32.dll" Alias "SetSecurityDescriptorDacl" (pSecurityDescriptor As SECURITY_DESCRIPTOR, ByVal bDaclPresent As Long, pDacl As ACL, ByVal bDaclDefaulted As Long) As Long
Declare Function GetSecurityDescriptorDacl Lib "advapi32.dll" Alias "GetSecurityDescriptorDacl" (pSecurityDescriptor As SECURITY_DESCRIPTOR, lpbDaclPresent As Long, pDacl As ACL, lpbDaclDefaulted As Long) As Long
Declare Function SetSecurityDescriptorSacl Lib "advapi32.dll" Alias "SetSecurityDescriptorSacl" (pSecurityDescriptor As SECURITY_DESCRIPTOR, ByVal bSaclPresent As Long, pSacl As ACL, ByVal bSaclDefaulted As Long) As Long
Declare Function GetSecurityDescriptorSacl Lib "advapi32.dll" Alias "GetSecurityDescriptorSacl" (pSecurityDescriptor As SECURITY_DESCRIPTOR, ByVal lpbSaclPresent As Long, pSacl As ACL, ByVal lpbSaclDefaulted As Long) As Long
Declare Function SetSecurityDescriptorOwner Lib "advapi32.dll" Alias "SetSecurityDescriptorOwner" (pSecurityDescriptor As SECURITY_DESCRIPTOR, pOwner As Any, ByVal bOwnerDefaulted As Long) As Long
Declare Function GetSecurityDescriptorOwner Lib "advapi32.dll" Alias "GetSecurityDescriptorOwner" (pSecurityDescriptor As SECURITY_DESCRIPTOR, pOwner As Any, ByVal lpbOwnerDefaulted As Long) As Long
Declare Function SetSecurityDescriptorGroup Lib "advapi32.dll" Alias "SetSecurityDescriptorGroup" (pSecurityDescriptor As SECURITY_DESCRIPTOR, pGroup As Any, ByVal bGroupDefaulted As Long) As Long
Declare Function GetSecurityDescriptorGroup Lib "advapi32.dll" Alias "GetSecurityDescriptorGroup" (pSecurityDescriptor As SECURITY_DESCRIPTOR, pGroup As Any, ByVal lpbGroupDefaulted As Long) As Long
Declare Function CreatePrivateObjectSecurity Lib "advapi32.dll" Alias "CreatePrivateObjectSecurity" (ParentDescriptor As SECURITY_DESCRIPTOR, CreatorDescriptor As SECURITY_DESCRIPTOR, NewDescriptor As SECURITY_DESCRIPTOR, ByVal IsDirectoryObject As Long, ByVal Token As Long, GenericMapping As GENERIC_MAPPING) As Long
Declare Function SetPrivateObjectSecurity Lib "advapi32.dll" Alias "SetPrivateObjectSecurity" (ByVal SecurityInformation As Long, ModificationDescriptor As SECURITY_DESCRIPTOR, ObjectsSecurityDescriptor As SECURITY_DESCRIPTOR, GenericMapping As GENERIC_MAPPING, ByVal Token As Long) As Long
Declare Function GetPrivateObjectSecurity Lib "advapi32.dll" Alias "GetPrivateObjectSecurity" (ObjectDescriptor As SECURITY_DESCRIPTOR, ByVal SecurityInformation As Long, ResultantDescriptor As SECURITY_DESCRIPTOR, ByVal DescriptorLength As Long, ReturnLength As Long) As Long
Declare Function DestroyPrivateObjectSecurity Lib "advapi32.dll" Alias "DestroyPrivateObjectSecurity" (ObjectDescriptor As SECURITY_DESCRIPTOR) As Long
Declare Function MakeSelfRelativeSD Lib "advapi32.dll" Alias "MakeSelfRelativeSD" (pAbsoluteSecurityDescriptor As SECURITY_DESCRIPTOR, pSelfRelativeSecurityDescriptor As SECURITY_DESCRIPTOR, lpdwBufferLength As Long) As Long
Declare Function MakeAbsoluteSD Lib "advapi32.dll" Alias "MakeAbsoluteSD" (pSelfRelativeSecurityDescriptor As SECURITY_DESCRIPTOR, pAbsoluteSecurityDescriptor As SECURITY_DESCRIPTOR, lpdwAbsoluteSecurityDescriptorSize As Long, pDacl As ACL, lpdwDaclSize As Long, pSacl As ACL, lpdwSaclSize As Long, pOwner As Any, lpdwOwnerSize As Long, pPrimaryGroup As Any, lpdwPrimaryGroupSize As Long) As Long
Declare Function SetFileSecurity Lib "advapi32.dll" Alias "SetFileSecurityA" (ByVal lpFileName As String, ByVal SecurityInformation As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR) As Long
Declare Function GetFileSecurity Lib "advapi32.dll" Alias "GetFileSecurityA" (ByVal lpFileName As String, ByVal RequestedInformation As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR, ByVal nLength As Long, lpnLengthNeeded As Long) As Long
Declare Function SetKernelObjectSecurity Lib "advapi32.dll" Alias "SetKernelObjectSecurity" (ByVal Handle As Long, ByVal SecurityInformation As Long, SecurityDescriptor As SECURITY_DESCRIPTOR) As Long
Declare Function FindFirstChangeNotification Lib "kernel32" Alias "FindFirstChangeNotificationA" (ByVal lpPathName As String, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long) As Long
Declare Function FindNextChangeNotification Lib "kernel32" Alias "FindNextChangeNotification" (ByVal hChangeHandle As Long) As Long
Declare Function FindCloseChangeNotification Lib "kernel32" Alias "FindCloseChangeNotification" (ByVal hChangeHandle As Long) As Long
Declare Function VirtualLock Lib "kernel32" Alias "VirtualLock" (lpAddress As Any, ByVal dwSize As Long) As Long
Declare Function VirtualUnlock Lib "kernel32" Alias "VirtualUnlock" (lpAddress As Any, ByVal dwSize As Long) As Long
Declare Function MapViewOfFileEx Lib "kernel32" Alias "MapViewOfFileEx" (ByVal hFileMappingObject As Long, ByVal dwDesiredAccess As Long, ByVal dwFileOffsetHigh As Long, ByVal dwFileOffsetLow As Long, ByVal dwNumberOfBytesToMap As Long, lpBaseAddress As Any) As Long
Declare Function SetPriorityClass Lib "kernel32" Alias "SetPriorityClass" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long
Declare Function GetPriorityClass Lib "kernel32" Alias "GetPriorityClass" (ByVal hProcess As Long) As Long

Type CONTEXT
	FltF0 As Double
	FltF1 As Double
	FltF2 As Double
	FltF3 As Double
	FltF4 As Double
	FltF5 As Double
	FltF6 As Double
	FltF7 As Double
	FltF8 As Double
	FltF9 As Double
	FltF10 As Double
	FltF11 As Double
	FltF12 As Double
	FltF13 As Double
	FltF14 As Double
	FltF15 As Double
	FltF16 As Double
	FltF17 As Double
	FltF18 As Double
	FltF19 As Double
	FltF20 As Double
	FltF21 As Double
	FltF22 As Double
	FltF23 As Double
	FltF24 As Double
	FltF25 As Double
	FltF26 As Double
	FltF27 As Double
	FltF28 As Double
	FltF29 As Double
	FltF30 As Double
	FltF31 As Double

	IntV0 As Double
	IntT0 As Double
	IntT1 As Double
	IntT2 As Double
	IntT3 As Double
	IntT4 As Double
	IntT5 As Double
	IntT6 As Double
	IntT7 As Double
	IntS0 As Double
	IntS1 As Double
	IntS2 As Double
	IntS3 As Double
	IntS4 As Double
	IntS5 As Double
	IntFp As Double
	IntA0 As Double
	IntA1 As Double
	IntA2 As Double
	IntA3 As Double
	IntA4 As Double
	IntA5 As Double
	IntT8 As Double
	IntT9 As Double
	IntT10 As Double
	IntT11 As Double
	IntRa As Double
	IntT12 As Double
	IntAt As Double
	IntGp As Double
	IntSp As Double
	IntZero As Double

	Fpcr As Double
	SoftFpcr As Double

	Fir As Double
	Psr As Long

	ContextFlags As Long
	Fill(4) As Long
End Type

Type EXCEPTION_POINTERS
    pExceptionRecord As EXCEPTION_RECORD
    ContextRecord As CONTEXT
End Type

Type LDT_BYTES	' Definido para su uso en el tipo LDT_ENTRY 
	BaseMid As Byte
	Flags1 As Byte
	Flags2 As Byte
	BaseHi As Byte
End Type

Type LDT_ENTRY
	LimitLow As Integer
	BaseLow As Integer
	HighWord As Long	' Puede usar el tipo LDT_BYTES
End Type

Declare Sub FatalExit Lib "kernel32" Alias "FatalExit" (ByVal code As Long)
Declare Function GetEnvironmentStrings Lib "kernel32" Alias "GetEnvironmentStringsA" () As String
Declare Sub RaiseException Lib "kernel32" Alias "RaiseException" (ByVal dwExceptionCode As Long, ByVal dwExceptionFlags As Long, ByVal nNumberOfArguments As Long, lpArguments As Long)
Declare Function UnhandledExceptionFilter Lib "kernel32" Alias "UnhandledExceptionFilter" (ExceptionInfo As EXCEPTION_POINTERS) As Long

Declare Function CreateThread Lib "kernel32" Alias "CreateThread" (lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal dwStackSize As Long, lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Declare Function CreateRemoteThread Lib "kernel32" Alias "CreateRemoteThread" (ByVal hProcess As Long, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal dwStackSize As Long, lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Declare Function GetCurrentThread Lib "kernel32" Alias "GetCurrentThread" () As Long
Declare Function GetCurrentThreadId Lib "kernel32" Alias "GetCurrentThreadId" () As Long
Declare Function SetThreadPriority Lib "kernel32" Alias "SetThreadPriority" (ByVal hThread As Long, ByVal nPriority As Long) As Long
Declare Function GetThreadPriority Lib "kernel32" Alias "GetThreadPriority" (ByVal hThread As Long) As Long
Declare Function GetThreadTimes Lib "kernel32" Alias "GetThreadTimes" (ByVal hThread As Long, lpCreationTime As FILETIME, lpExitTime As FILETIME, lpKernelTime As FILETIME, lpUserTime As FILETIME) As Long
Declare Sub ExitThread Lib "kernel32" Alias "ExitThread" (ByVal dwExitCode As Long)
Declare Function TerminateThread Lib "kernel32" Alias "TerminateThread" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
Declare Function GetExitCodeThread Lib "kernel32" Alias "GetExitCodeThread" (ByVal hThread As Long, lpExitCode As Long) As Long
Declare Function GetThreadSelectorEntry Lib "kernel32" Alias "GetThreadSelectorEntry" (ByVal hThread As Long, ByVal dwSelector As Long, lpSelectorEntry As LDT_ENTRY) As Long

' Declaraciones de comunicaciones
Declare Function SetCommState Lib "kernel32" Alias "SetCommState" (ByVal hCommDev As Long, lpDCB As DCB) As Long
Declare Function SetCommTimeouts Lib "kernel32" Alias "SetCommTimeouts" (ByVal hFile As Long, lpCommTimeouts As COMMTIMEOUTS) As Long
Declare Function GetCommState Lib "kernel32" Alias "GetCommState" (ByVal nCid As Long, lpDCB As DCB) As Long
Declare Function GetCommTimeouts Lib "kernel32" Alias "GetCommTimeouts" (ByVal hFile As Long, lpCommTimeouts As COMMTIMEOUTS) As Long
Declare Function PurgeComm Lib "kernel32" Alias "PurgeComm" (ByVal hFile As Long, ByVal dwFlags As Long) As Long
Declare Function BuildCommDCB Lib "kernel32" Alias "BuildCommDCBA" (ByVal lpDef As String, lpDCB As DCB) As Long
Declare Function BuildCommDCBAndTimeouts Lib "kernel32" Alias "BuildCommDCBAndTimeoutsA" (ByVal lpDef As String, lpDCB As DCB, lpCommTimeouts As COMMTIMEOUTS) As Long
Declare Function TransmitCommChar Lib "kernel32" Alias "TransmitCommChar" (ByVal nCid As Long, ByVal cChar As Byte) As Long
Declare Function SetCommBreak Lib "kernel32" Alias "SetCommBreak" (ByVal nCid As Long) As Long
Declare Function SetCommMask Lib "kernel32" Alias "SetCommMask" (ByVal hFile As Long, ByVal dwEvtMask As Long) As Long
Declare Function ClearCommBreak Lib "kernel32" Alias "ClearCommBreak" (ByVal nCid As Long) As Long
Declare Function ClearCommError Lib "kernel32" Alias "ClearCommError" (ByVal hFile As Long, lpErrors As Long, lpStat As COMSTAT) As Long
Declare Function SetupComm Lib "kernel32" Alias "SetupComm" (ByVal hFile As Long, ByVal dwInQueue As Long, ByVal dwOutQueue As Long) As Long
Declare Function EscapeCommFunction Lib "kernel32" Alias "EscapeCommFunction" (ByVal nCid As Long, ByVal nFunc As Long) As Long
Declare Function GetCommMask Lib "kernel32" Alias "GetCommMask" (ByVal hFile As Long, lpEvtMask As Long) As Long
Declare Function GetCommProperties Lib "kernel32" Alias "GetCommProperties" (ByVal hFile As Long, lpCommProp As COMMPROP) As Long
Declare Function GetCommModemStatus Lib "kernel32" Alias "GetCommModemStatus" (ByVal hFile As Long, lpModemStat As Long) As Long
Declare Function WaitCommEvent Lib "kernel32" Alias "WaitCommEvent" (ByVal hFile As Long, lpEvtMask As Long, lpOverlapped As OVERLAPPED) As Long

Declare Function SetTapePosition Lib "kernel32" Alias "SetTapePosition" (ByVal hDevice As Long, ByVal dwPositionMethod As Long, ByVal dwPartition As Long, ByVal dwOffsetLow As Long, ByVal dwOffsetHigh As Long, ByVal bimmediate As Long) As Long
Declare Function GetTapePosition Lib "kernel32" Alias "GetTapePosition" (ByVal hDevice As Long, ByVal dwPositionType As Long, lpdwPartition As Long, lpdwOffsetLow As Long, lpdwOffsetHigh As Long) As Long
Declare Function PrepareTape Lib "kernel32" Alias "PrepareTape" (ByVal hDevice As Long, ByVal dwOperation As Long, ByVal bimmediate As Long) As Long
Declare Function EraseTape Lib "kernel32" Alias "EraseTape" (ByVal hDevice As Long, ByVal dwEraseType As Long, ByVal bimmediate As Long) As Long
Declare Function CreateTapePartition Lib "kernel32" Alias "CreateTapePartition" (ByVal hDevice As Long, ByVal dwPartitionMethod As Long, ByVal dwCount As Long, ByVal dwSize As Long) As Long
Declare Function WriteTapemark Lib "kernel32" Alias "WriteTapemark" (ByVal hDevice As Long, ByVal dwTapemarkType As Long, ByVal dwTapemarkCount As Long, ByVal bimmediate As Long) As Long
Declare Function GetTapeStatus Lib "kernel32" Alias "GetTapeStatus" (ByVal hDevice As Long) As Long
Declare Function GetTapeParameters Lib "kernel32" Alias "GetTapeParameters" (ByVal hDevice As Long, ByVal dwOperation As Long, lpdwSize As Long, lpTapeInformation As Any) As Long

Const GET_TAPE_MEDIA_INFORMATION = 0
Const GET_TAPE_DRIVE_INFORMATION = 1

Declare Function SetTapeParameters Lib "kernel32" Alias "SetTapeParameters" (ByVal hDevice As Long, ByVal dwOperation As Long, lpTapeInformation As Any) As Long

Const SET_TAPE_MEDIA_INFORMATION = 0
Const SET_TAPE_DRIVE_INFORMATION = 1

Declare Function Beep Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

Declare Function MulDiv Lib "kernel32" Alias "MulDiv" (ByVal nNumber As Long, ByVal nNumerator As Long, ByVal nDenominator As Long) As Long

Declare Sub GetSystemTime Lib "kernel32" Alias "GetSystemTime" (lpSystemTime As SYSTEMTIME)
Declare Function SetSystemTime Lib "kernel32" Alias "SetSystemTime" (lpSystemTime As SYSTEMTIME) As Long
Declare Sub GetLocalTime Lib "kernel32" Alias "GetLocalTime" (lpSystemTime As SYSTEMTIME)
Declare Function SetLocalTime Lib "kernel32" Alias "SetLocalTime" (lpSystemTime As SYSTEMTIME) As Long
Declare Sub GetSystemInfo Lib "kernel32" Alias "GetSystemInfo" (lpSystemInfo As SYSTEM_INFO)

Type TIME_ZONE_INFORMATION
        Bias As Long
        StandardName(32) As Integer
        StandardDate As SYSTEMTIME
        StandardBias As Long
        DaylightName(32) As Integer
        DaylightDate As SYSTEMTIME
        DaylightBias As Long
End Type

Declare Function GetTimeZoneInformation Lib "kernel32" Alias "GetTimeZoneInformation" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
Declare Function SetTimeZoneInformation Lib "kernel32" Alias "SetTimeZoneInformation" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long

' Rutinas para convertir desde y hacia
' la hora del sistema y la hora del archivo

Declare Function SystemTimeToFileTime Lib "kernel32" Alias "SystemTimeToFileTime" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long
Declare Function FileTimeToLocalFileTime Lib "kernel32" Alias "FileTimeToLocalFileTime" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Declare Function LocalFileTimeToFileTime Lib "kernel32" Alias "LocalFileTimeToFileTime" (lpLocalFileTime As FILETIME, lpFileTime As FILETIME) As Long
Declare Function FileTimeToSystemTime Lib "kernel32" Alias "FileTimeToSystemTime" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Declare Function CompareFileTime Lib "kernel32" Alias "CompareFileTime" (lpFileTime1 As FILETIME, lpFileTime2 As FILETIME) As Long
Declare Function FileTimeToDosDateTime Lib "kernel32" Alias "FileTimeToDosDateTime" (lpFileTime As FILETIME, ByVal lpFatDate As Long, ByVal lpFatTime As Long) As Long
Declare Function DosDateTimeToFileTime Lib "kernel32" Alias "DosDateTimeToFileTime" (ByVal wFatDate As Long, ByVal wFatTime As Long, lpFileTime As FILETIME) As Long
Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long
Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Long) As Long

Const FORMAT_MESSAGE_ALLOCATE_BUFFER = &H100
Const FORMAT_MESSAGE_IGNORE_INSERTS = &H200
Const FORMAT_MESSAGE_FROM_STRING = &H400
Const FORMAT_MESSAGE_FROM_HMODULE = &H800
Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
Const FORMAT_MESSAGE_ARGUMENT_ARRAY = &H2000
Const FORMAT_MESSAGE_MAX_WIDTH_MASK = &HFF

Declare Function CreatePipe Lib "kernel32" Alias "CreatePipe" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As SECURITY_ATTRIBUTES, ByVal nSize As Long) As Long
Declare Function ConnectNamedPipe Lib "kernel32" Alias "ConnectNamedPipe" (ByVal hNamedPipe As Long, lpOverlapped As OVERLAPPED) As Long
Declare Function DisconnectNamedPipe Lib "kernel32" Alias "DisconnectNamedPipe" (ByVal hNamedPipe As Long) As Long
Declare Function SetNamedPipeHandleState Lib "kernel32" Alias "SetNamedPipeHandleState" (ByVal hNamedPipe As Long, lpMode As Long, lpMaxCollectionCount As Long, lpCollectDataTimeout As Long) As Long
Declare Function GetNamedPipeInfo Lib "kernel32" Alias "GetNamedPipeInfo" (ByVal hNamedPipe As Long, lpFlags As Long, lpOutBufferSize As Long, lpInBufferSize As Long, lpMaxInstances As Long) As Long
Declare Function PeekNamedPipe Lib "kernel32" Alias "PeekNamedPipe" (ByVal hNamedPipe As Long, lpBuffer As Any, ByVal nBufferSize As Long, lpBytesRead As Long, lpTotalBytesAvail As Long, lpBytesLeftThisMessage As Long) As Long
Declare Function TransactNamedPipe Lib "kernel32" Alias "TransactNamedPipe" (ByVal hNamedPipe As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesRead As Long, lpOverlapped As OVERLAPPED) As Long

Declare Function CreateMailslot Lib "kernel32" Alias "CreateMailslotA" (ByVal lpName As String, ByVal nMaxMessageSize As Long, ByVal lReadTimeout As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Declare Function GetMailslotInfo Lib "kernel32" Alias "GetMailslotInfo" (ByVal hMailslot As Long, lpMaxMessageSize As Long, lpNextSize As Long, lpMessageCount As Long, lpReadTimeout As Long) As Long
Declare Function SetMailslotInfo Lib "kernel32" Alias "SetMailslotInfo" (ByVal hMailslot As Long, ByVal lReadTimeout As Long) As Long
Declare Function MapViewOfFile Lib "kernel32" Alias "MapViewOfFile" (ByVal hFileMappingObject As Long, ByVal dwDesiredAccess As Long, ByVal dwFileOffsetHigh As Long, ByVal dwFileOffsetLow As Long, ByVal dwNumberOfBytesToMap As Long) As Long

Declare Function FlushViewOfFile Lib "kernel32" Alias "FlushViewOfFile" (lpBaseAddress As Any, ByVal dwNumberOfBytesToFlush As Long) As Long
Declare Function UnmapViewOfFile Lib "kernel32" Alias "UnmapViewOfFile" (lpBaseAddress As Any) As Long

Declare Function lstrcmp Lib "kernel32" Alias "lstrcmpA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Declare Function lstrcmpi Lib "kernel32" Alias "lstrcmpiA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long

Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
Declare Function lclose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long
Declare Function lcreat Lib "kernel32" Alias "_lcreat" (ByVal lpPathName As String, ByVal iAttribute As Long) As Long
Declare Function llseek Lib "kernel32" Alias "_llseek" (ByVal hFile As Long, ByVal lOffset As Long, ByVal iOrigin As Long) As Long
Declare Function lread Lib "kernel32" Alias "_lread" (ByVal hFile As Long, lpBuffer As Any, ByVal wBytes As Long) As Long
Declare Function lwrite Lib "kernel32" Alias "_lwrite" (ByVal hFile As Long, ByVal lpBuffer As String, ByVal wBytes As Long) As Long

Declare Function hread Lib "kernel32" Alias "_hread" (ByVal hFile As Long, lpBuffer As Any, ByVal lBytes As Long) As Long
Declare Function hwrite Lib "kernel32" Alias "_hwrite" (ByVal hFile As Long, ByVal lpBuffer As String, ByVal lBytes As Long) As Long

Declare Function TlsAlloc Lib "kernel32" Alias "TlsAlloc" () As Long

Const TLS_OUT_OF_INDEXES = &HFFFF

Declare Function TlsGetValue Lib "kernel32" Alias "TlsGetValue" (ByVal dwTlsIndex As Long) As Long
Declare Function TlsSetValue Lib "kernel32" Alias "TlsSetValue" (ByVal dwTlsIndex As Long, lpTlsValue As Any) As Long
Declare Function TlsFree Lib "kernel32" Alias "TlsFree" (ByVal dwTlsIndex As Long) As Long
Declare Function SleepEx Lib "kernel32" Alias "SleepEx" (ByVal dwMilliseconds As Long, ByVal bAlertable As Long) As Long
Declare Function WaitForSingleObjectEx Lib "kernel32" Alias "WaitForSingleObjectEx" (ByVal hHandle As Long, ByVal dwMilliseconds As Long, ByVal bAlertable As Long) As Long
Declare Function WaitForMultipleObjectsEx Lib "kernel32" Alias "WaitForMultipleObjectsEx" (ByVal nCount As Long, lpHandles As Long, ByVal bWaitAll As Long, ByVal dwMilliseconds As Long, ByVal bAlertable As Long) As Long
Declare Function BackupRead Lib "kernel32" Alias "BackupRead" (ByVal hFile As Long, lpBuffer As Byte, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal bAbort As Long, ByVal bProcessSecurity As Long, lpContext As Any) As Long
Declare Function BackupSeek Lib "kernel32" Alias "BackupSeek" (ByVal hFile As Long, ByVal dwLowBytesToSeek As Long, ByVal dwHighBytesToSeek As Long, lpdwLowByteSeeked As Long, lpdwHighByteSeeked As Long, lpContext As Long) As Long
Declare Function BackupWrite Lib "kernel32" Alias "BackupWrite" (ByVal hFile As Long, lpBuffer As Byte, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal bAbort As Long, ByVal bProcessSecurity As Long, lpContext As Long) As Long

' Tipo de Id. de Stream
Type WIN32_STREAM_ID
        dwStreamID As Long
        dwStreamAttributes As Long
        dwStreamSizeLow As Long
        dwStreamSizeHigh As Long
        dwStreamNameSize As Long
        cStreamName As Byte
End Type

' Identificadores de Stream
Const BACKUP_DATA = &H1
Const BACKUP_EA_DATA = &H2
Const BACKUP_SECURITY_DATA = &H3
Const BACKUP_ALTERNATE_DATA = &H4
Const BACKUP_LINK = &H5

'  Atributos de Stream
Const STREAM_MODIFIED_WHEN_READ = &H1
Const STREAM_CONTAINS_SECURITY = &H2

'  Bajo esta lnea est la API de modo dual. Tambin se incluyen los tipos de modo dual.

Const STARTF_USESHOWWINDOW = &H1
Const STARTF_USESIZE = &H2
Const STARTF_USEPOSITION = &H4
Const STARTF_USECOUNTCHARS = &H8
Const STARTF_USEFILLATTRIBUTE = &H10
Const STARTF_RUNFULLSCREEN = &H20        '  se ignora para plataformas que no sean x86
Const STARTF_FORCEONFEEDBACK = &H40
Const STARTF_FORCEOFFFEEDBACK = &H80
Const STARTF_USESTDHANDLES = &H100

Type STARTUPINFO
        cb As Long
        lpReserved As String
        lpDesktop As String
        lpTitle As String
        dwX As Long
        dwY As Long
        dwXSize As Long
        dwYSize As Long
        dwXCountChars As Long
        dwYCountChars As Long
        dwFillAttribute As Long
        dwFlags As Long
        wShowWindow As Integer
        cbReserved2 As Integer
        lpReserved2 As Long
        hStdInput As Long
        hStdOutput As Long
        hStdError As Long
End Type

Const SHUTDOWN_NORETRY = &H1

Type WIN32_FIND_DATA
        dwFileAttributes As Long
        ftCreationTime As FILETIME
        ftLastAccessTime As FILETIME
        ftLastWriteTime As FILETIME
        nFileSizeHigh As Long
        nFileSizeLow As Long
        dwReserved0 As Long
        dwReserved1 As Long
        cFileName As String * MAX_PATH
        cAlternate As String * 14
End Type

Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
Declare Function OpenMutex Lib "kernel32" Alias "OpenMutexA" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpName As String) As Long
Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA" (lpEventAttributes As SECURITY_ATTRIBUTES, ByVal bManualReset As Long, ByVal bInitialState As Long, ByVal lpName As String) As Long
Declare Function OpenEvent Lib "kernel32" Alias "OpenEventA" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpName As String) As Long
Declare Function CreateSemaphore Lib "kernel32" Alias "CreateSemaphoreA" (lpSemaphoreAttributes As SECURITY_ATTRIBUTES, ByVal lInitialCount As Long, ByVal lMaximumCount As Long, ByVal lpName As String) As Long
Declare Function OpenSemaphore Lib "kernel32" Alias "OpenSemaphoreA" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpName As String) As Long
Declare Function CreateFileMapping Lib "kernel32" Alias "CreateFileMappingA" (ByVal hFile As Long, lpFileMappigAttributes As SECURITY_ATTRIBUTES, ByVal flProtect As Long, ByVal dwMaximumSizeHigh As Long, ByVal dwMaximumSizeLow As Long, ByVal lpName As String) As Long
Declare Function OpenFileMapping Lib "kernel32" Alias "OpenFileMappingA" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpName As String) As Long
Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Declare Function IsBadReadPtr Lib "kernel32" Alias "IsBadReadPtr" (lp As Any, ByVal ucb As Long) As Long
Declare Function IsBadWritePtr Lib "kernel32" Alias "IsBadWritePtr" (lp As Any, ByVal ucb As Long) As Long
Declare Function IsBadStringPtr Lib "kernel32" Alias "IsBadStringPtrA" (ByVal lpsz As String, ByVal ucchMax As Long) As Long
Declare Function IsBadHugeReadPtr Lib "kernel32" Alias "IsBadHugeReadPtr" (lp As Any, ByVal ucb As Long) As Long
Declare Function IsBadHugeWritePtr Lib "kernel32" Alias "IsBadHugeWritePtr" (lp As Any, ByVal ucb As Long) As Long

Declare Function LookupAccountSid Lib "advapi32.dll" Alias "LookupAccountSidA" (ByVal lpSystemName As String, Sid As Any, ByVal name As String, cbName As Long, ByVal ReferencedDomainName As String, cbReferencedDomainName As Long, peUse As Integer) As Long

Declare Function LookupAccountName Lib "advapi32.dll" Alias "LookupAccountNameA" (ByVal lpSystemName As String, ByVal lpAccountName As String, Sid As Long, cbSid As Long, ByVal ReferencedDomainName As String, cbReferencedDomainName As Long, peUse As Integer) As Long
Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LARGE_INTEGER) As Long
Declare Function LookupPrivilegeName Lib "advapi32.dll" Alias "LookupPrivilegeNameA" (ByVal lpSystemName As String, lpLuid As LARGE_INTEGER, ByVal lpName As String, cbName As Long) As Long
Declare Function LookupPrivilegeDisplayName Lib "advapi32.dll" Alias "LookupPrivilegeDisplayNameA" (ByVal lpSystemName As String, ByVal lpName As String, ByVal lpDisplayName As String, cbDisplayName As Long, lpLanguageID As Long) As Long
Declare Function AllocateLocallyUniqueId Lib "advapi32.dll" Alias "AllocateLocallyUniqueId" (Luid As LARGE_INTEGER) As Long

Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Declare Function SetComputerName Lib "kernel32" Alias "SetComputerNameA" (ByVal lpComputerName As String) As Long
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

' API de contador de rendimiento
Declare Function QueryPerformanceCounter Lib "kernel32" Alias "QueryPerformanceCounter" (lpPerformanceCount As LARGE_INTEGER) As Long
Declare Function QueryPerformanceFrequency Lib "kernel32" Alias "QueryPerformanceFrequency" (lpFrequency As LARGE_INTEGER) As Long

'  Cdigos de terminacin anormal
Const TC_NORMAL = 0
Const TC_HARDERR = 1
Const TC_GP_TRAP = 2
Const TC_SIGNAL = 3


' Declaraciones de procedimiento, definiciones de constantes y
' macros para el componente NLS

' Mximos para longitud de cadena
Const MAX_LEADBYTES = 12  '  5 ranges, 2 bytes ea., 0 term.

' Indicadores de conversin de MBCS y Unicode.

Const MB_PRECOMPOSED = &H1         '  usa caracteres precompuestos
Const MB_COMPOSITE = &H2           '  usa caracteres compuestos
Const MB_USEGLYPHCHARS = &H4       '  usa caracteres glyph, no caracteres CTRL

Const WC_DEFAULTCHECK = &H100      '  comprueba el carcter predeterminado
Const WC_COMPOSITECHECK = &H200    '  convierte el compuesto en precompuesto
Const WC_DISCARDNS = &H10          '  descarta los caracteres sin espaciado
Const WC_SEPCHARS = &H20           '  genera caracteres independientes
Const WC_DEFAULTCHAR = &H40        '  sustituye con el carcter predeterminado

' Indicadores de tipo de carcter.
Const CT_CTYPE1 = &H1         '  informacin de ctype 1
Const CT_CTYPE2 = &H2         '  informacin de ctype 2
Const CT_CTYPE3 = &H4         '  informacin de ctype 3

' Bits indicadores de CType 1.
Const C1_UPPER = &H1     '  maysculas
Const C1_LOWER = &H2     '  minsculas
Const C1_DIGIT = &H4     '  dgitos decimales
Const C1_SPACE = &H8     '  caracteres de espaciado
Const C1_PUNCT = &H10    '  caracteres de puntuacin
Const C1_CNTRL = &H20    '  caracteres de control
Const C1_BLANK = &H40    '  caracteres en blanco
Const C1_XDIGIT = &H80   '  otros dgitos
Const C1_ALPHA = &H100   '  cualquier letra

' Bits indicadores de CType 2.

Const C2_LEFTTORIGHT = &H1     '  izquierda a derecha
Const C2_RIGHTTOLEFT = &H2     '  derecha a izquierda

Const C2_EUROPENUMBER = &H3     '  nmero, dgito europeo
Const C2_EUROPESEPARATOR = &H4  '  separador numrico europeo
Const C2_EUROPETERMINATOR = &H5 '  terminacin numrica europea
Const C2_ARABICNUMBER = &H6     '  nmero arbigo
Const C2_COMMONSEPARATOR = &H7  '  separador numrico comn

Const C2_BLOCKSEPARATOR = &H8   '  separador de bloques
Const C2_SEGMENTSEPARATOR = &H9 '  separador de segmentos
Const C2_WHITESPACE = &HA       '  espacio en blanco
Const C2_OTHERNEUTRAL = &HB     '  otros neutros

Const C2_NOTAPPLICABLE = &H0    '  direccionalidad no implcita

' Bits indicadores de CType 3.
Const C3_NONSPACING = &H1       '  carcter sin espaciado
Const C3_DIACRITIC = &H2        '  marca diacrtica
Const C3_VOWELMARK = &H4        '  marca de vocal
Const C3_SYMBOL = &H8           '  smbolos

Const C3_NOTAPPLICABLE = &H0    '  ctype 3 no es aplicable

' Indicadores de cadena.
Const NORM_IGNORECASE = &H1     '  no distingue maysculas y minsculas
Const NORM_IGNORENONSPACE = &H2 '  pasa por alto los caracteres sin espaciado
Const NORM_IGNORESYMBOLS = &H4  '  pasa por alto los smbolos

' Indicadores de asignacin independientes de la configuracin regional.
Const MAP_FOLDCZONE = &H10      '  dobla los caracteres de zona de compatibilidad
Const MAP_PRECOMPOSED = &H20    '  convierte a caracteres precompuestos
Const MAP_COMPOSITE = &H40      '  convierte a caracteres compuestos
Const MAP_FOLDDIGITS = &H80     '  convierte todos los dgitos a ASCII 0-9

' Indicadores de asignacin dependientes de la configuracin regional.
Const LCMAP_LOWERCASE = &H100   '  letras minsculas
Const LCMAP_UPPERCASE = &H200   '  letras maysculas
Const LCMAP_SORTKEY = &H400     '  criterio de orden WC (normalizar)
Const LCMAP_BYTEREV = &H800     '  inversin de bytes

' Indicadores de clasificacin.
Const SORT_STRINGSORT = &H1000  '  usa el mtodo de orden cadena

' Valores predeterminados de la pgina de cdigos.
Const CP_ACP = 0                '  predetermina la pgina de cdigos ANSI
Const CP_OEMCP = 1              '  predetermina la pgina de cdigos OEM

' Cdigos de pas.

Const CTRY_DEFAULT = 0

Const CTRY_AUSTRALIA = 61    '  Australia
Const CTRY_AUSTRIA = 43      '  Austria
Const CTRY_BELGIUM = 32      '  Blgica
Const CTRY_BRAZIL = 55       '  Brasil
Const CTRY_CANADA = 2        '  Canad
Const CTRY_DENMARK = 45      '  Dinamarca
Const CTRY_FINLAND = 358     '  Finlandia
Const CTRY_FRANCE = 33       '  Francia
Const CTRY_GERMANY = 49      '  Alemania
Const CTRY_ICELAND = 354     '  Islandia
Const CTRY_IRELAND = 353     '  Irlanda
Const CTRY_ITALY = 39        '  Italia
Const CTRY_JAPAN = 81        '  Japn
Const CTRY_MEXICO = 52       '  Mxico
Const CTRY_NETHERLANDS = 31  '  Pases Bajos
Const CTRY_NEW_ZEALAND = 64  '  Nueva Zelanda
Const CTRY_NORWAY = 47       '  Noruega
Const CTRY_PORTUGAL = 351    '  Portugal
Const CTRY_PRCHINA = 86      '  Repblica Popular de China
Const CTRY_SOUTH_KOREA = 82  '  Corea del Sur
Const CTRY_SPAIN = 34  	'  Espaa
Const CTRY_SWEDEN = 46  	'  Suecia
Const CTRY_SWITZERLAND = 41  '  Suiza
Const CTRY_TAIWAN = 886      '  Taiwan
Const CTRY_UNITED_KINGDOM = 44  '  Reino Unido
Const CTRY_UNITED_STATES = 1     '  Estados Unidos

' Tipos de configuracin regional.
' Estos tipos se usan para la rutina de la API de NLS GetLocaleInfoW.

' LOCALE_NOUSEROVERRIDE se usa tambin en GetTimeFormatW y GetDateFormatW.
Const LOCALE_NOUSEROVERRIDE = &H80000000  '  no usa sustituciones del usuario

Const LOCALE_ILANGUAGE = &H1        '  Id. de idioma
Const LOCALE_SLANGUAGE = &H2        '  nombre traducido del idioma
Const LOCALE_SENGLANGUAGE = &H1001  '  nombre del idioma en ingls
Const LOCALE_SABBREVLANGNAME = &H3  '  nombre del idioma abreviado
Const LOCALE_SNATIVELANGNAME = &H4  '  nombre nativo del idioma
Const LOCALE_ICOUNTRY = &H5         '  cdigo del pas
Const LOCALE_SCOUNTRY = &H6         '  nombre traducido del pas
Const LOCALE_SENGCOUNTRY = &H1002   '  nombre del pas en ingls
Const LOCALE_SABBREVCTRYNAME = &H7  '  nombre abreviado del pas
Const LOCALE_SNATIVECTRYNAME = &H8  '  nombre nativo del pas
Const LOCALE_IDEFAULTLANGUAGE = &H9 '  Id. predeterminado del idioma
Const LOCALE_IDEFAULTCOUNTRY = &HA  '  cdigo predeterminado del pas
Const LOCALE_IDEFAULTCODEPAGE = &HB '  pgina de cdigos predeterminada

Const LOCALE_SLIST = &HC            '  separador de elementos de lista
Const LOCALE_IMEASURE = &HD         '  0 = mtrico, 1 = EE.UU.

Const LOCALE_SDECIMAL = &HE       '  separador de decimales
Const LOCALE_STHOUSAND = &HF      '  separador de miles
Const LOCALE_SGROUPING = &H10     '  agrupacin de dgitos
Const LOCALE_IDIGITS = &H11       '  nmero de dgitos fraccionarios
Const LOCALE_ILZERO = &H12        '  nmero de ceros iniciales de decimales
Const LOCALE_SNATIVEDIGITS = &H13 ' ASCII 0-9 nativo

Const LOCALE_SCURRENCY = &H14         '  smbolo de moneda local
Const LOCALE_SINTLSYMBOL = &H15       '  smbolo de moneda internacional
Const LOCALE_SMONDECIMALSEP = &H16    '  separador de decimales en moneda
Const LOCALE_SMONTHOUSANDSEP = &H17   '  separador de miles en moneda
Const LOCALE_SMONGROUPING = &H18      '  agrupacin de moneda
Const LOCALE_ICURRDIGITS = &H19       '  nmero de dgitos de la moneda local
Const LOCALE_IINTLCURRDIGITS = &H1A   '  n de dgitos de la moneda internacional
Const LOCALE_ICURRENCY = &H1B         '  modo de moneda positiva
Const LOCALE_INEGCURR = &H1C          '  modo de moneda negativa

Const LOCALE_SDATE = &H1D           '  separador de fecha
Const LOCALE_STIME = &H1E           '  separador de hora
Const LOCALE_SSHORTDATE = &H1F      '  cadena de formato de fecha corta
Const LOCALE_SLONGDATE = &H20       '  cadena de formato de fecha larga
Const LOCALE_STIMEFORMAT = &H1003   '  cadena de formato de hora
Const LOCALE_IDATE = &H21           '  orden del formato de fecha corta
Const LOCALE_ILDATE = &H22          '  orden del formato de fecha larga
Const LOCALE_ITIME = &H23           '  especificador de formato de hora
Const LOCALE_ICENTURY = &H24        '  especificador de formato de siglo
Const LOCALE_ITLZERO = &H25         '  nmero de ceros iniciales en el campo hora
Const LOCALE_IDAYLZERO = &H26       '  nmero de ceros iniciales en el campo da
Const LOCALE_IMONLZERO = &H27       '  nmero de ceros iniciales en el campo mes
Const LOCALE_S1159 = &H28           '  designador de AM
Const LOCALE_S2359 = &H29           '  designador de PM

Const LOCALE_SDAYNAME1 = &H2A        '  nombre largo para Lunes
Const LOCALE_SDAYNAME2 = &H2B        '  nombre largo para Martes
Const LOCALE_SDAYNAME3 = &H2C        '  nombre largo para Mircoles
Const LOCALE_SDAYNAME4 = &H2D        '  nombre largo para Jueves
Const LOCALE_SDAYNAME5 = &H2E        '  nombre largo para Viernes
Const LOCALE_SDAYNAME6 = &H2F        '  nombre largo para Sbado
Const LOCALE_SDAYNAME7 = &H30        '  nombre largo para Domingo
Const LOCALE_SABBREVDAYNAME1 = &H31        '  nombre abreviado para Lunes
Const LOCALE_SABBREVDAYNAME2 = &H32        '  nombre abreviado para Martes
Const LOCALE_SABBREVDAYNAME3 = &H33        '  nombre abreviado para Mircoles
Const LOCALE_SABBREVDAYNAME4 = &H34        '  nombre abreviado para Jueves
Const LOCALE_SABBREVDAYNAME5 = &H35        '  nombre abreviado para Viernes
Const LOCALE_SABBREVDAYNAME6 = &H36        '  nombre abreviado para Sbado
Const LOCALE_SABBREVDAYNAME7 = &H37        '  nombre abreviado para Domingo
Const LOCALE_SMONTHNAME1 = &H38            '  nombre largo para Enero
Const LOCALE_SMONTHNAME2 = &H39            '  nombre largo para Febrero
Const LOCALE_SMONTHNAME3 = &H3A            '  nombre largo para Marzo
Const LOCALE_SMONTHNAME4 = &H3B            '  nombre largo para Abril
Const LOCALE_SMONTHNAME5 = &H3C            '  nombre largo para Mayo
Const LOCALE_SMONTHNAME6 = &H3D            '  nombre largo para Junio
Const LOCALE_SMONTHNAME7 = &H3E            '  nombre largo para Julio
Const LOCALE_SMONTHNAME8 = &H3F            '  nombre largo para Agosto
Const LOCALE_SMONTHNAME9 = &H40            '  nombre largo para Septiembre
Const LOCALE_SMONTHNAME10 = &H41           '  nombre largo para Octubre
Const LOCALE_SMONTHNAME11 = &H42           '  nombre largo para Noviembre
Const LOCALE_SMONTHNAME12 = &H43           '  nombre largo para Diciembre
Const LOCALE_SABBREVMONTHNAME1 = &H44      '  nombre abreviado para Enero
Const LOCALE_SABBREVMONTHNAME2 = &H45      '  nombre abreviado para Febrero
Const LOCALE_SABBREVMONTHNAME3 = &H46      '  nombre abreviado para Marzo
Const LOCALE_SABBREVMONTHNAME4 = &H47      '  nombre abreviado para Abril
Const LOCALE_SABBREVMONTHNAME5 = &H48      '  nombre abreviado para Mayo
Const LOCALE_SABBREVMONTHNAME6 = &H49      '  nombre abreviado para Junio
Const LOCALE_SABBREVMONTHNAME7 = &H4A      '  nombre abreviado para Julio
Const LOCALE_SABBREVMONTHNAME8 = &H4B      '  nombre abreviado para Agosto
Const LOCALE_SABBREVMONTHNAME9 = &H4C      '  nombre abreviado para Septiembre
Const LOCALE_SABBREVMONTHNAME10 = &H4D     '  nombre abreviado para Octubre
Const LOCALE_SABBREVMONTHNAME11 = &H4E     '  nombre abreviado para Noviembre
Const LOCALE_SABBREVMONTHNAME12 = &H4F     '  nombre abreviado para Diciembre
Const LOCALE_SABBREVMONTHNAME13 = &H100F

Const LOCALE_SPOSITIVESIGN = &H50       '  signo positivo
Const LOCALE_SNEGATIVESIGN = &H51       '  signo negativo
Const LOCALE_IPOSSIGNPOSN = &H52        '  posicin del signo positivo
Const LOCALE_INEGSIGNPOSN = &H53        '  posicin del signo negativo
Const LOCALE_IPOSSYMPRECEDES = &H54     '  smbolo de moneda precede a cantidad positiva
Const LOCALE_IPOSSEPBYSPACE = &H55      '  smbolo de moneda separado por un espacio de cantidad positiva
Const LOCALE_INEGSYMPRECEDES = &H56     '  smbolo de moneda precede a cantidad negativa
Const LOCALE_INEGSEPBYSPACE = &H57      '  smbolo de moneda separado por un espacio de cantidad negativa

' Indicadores de hora para GetTimeFormatW.
Const TIME_NOMINUTESORSECONDS = &H1      '  no usa minutos ni segundos
Const TIME_NOSECONDS = &H2               '  no usa segundos
Const TIME_NOTIMEMARKER = &H4            '  no usa un marcador de hora
Const TIME_FORCE24HOURFORMAT = &H8       '  usa siempre el formato de 24 horas

' Indicadores de fecha para GetDateFormatW.
Const DATE_SHORTDATE = &H1               '  usa imagen de fecha corta
Const DATE_LONGDATE = &H2                '  usa imagen de fecha larga


' API dependientes de la pgina de cdigos

Declare Function IsValidCodePage Lib "kernel32" Alias "IsValidCodePage" (ByVal CodePage As Long) As Long
Declare Function GetACP Lib "kernel32" Alias "GetACP" () As Long
Declare Function GetOEMCP Lib "kernel32" Alias "GetOEMCP" () As Long
Declare Function GetCPInfo Lib "kernel32" Alias "GetCPInfo" (ByVal CodePage As Long, lpCPInfo As CPINFO) As Long
Declare Function IsDBCSLeadByte Lib "kernel32" Alias "IsDBCSLeadByte" (ByVal bTestChar As Byte) As Long
Declare Function MultiByteToWideChar Lib "kernel32" Alias "MultiByteToWideChar" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long) As Long
Declare Function WideCharToMultiByte Lib "kernel32" Alias "WideCharToMultiByte" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long

' API dependientes de la configuracin regional

Declare Function CompareString Lib "kernel32" Alias "CompareStringA" (ByVal Locale As Long, ByVal dwCmpFlags As Long, ByVal lpString1 As String, ByVal cchCount1 As Long, ByVal lpString2 As String, ByVal cchCount2 As Long) As Long
Declare Function LCMapString Lib "kernel32" Alias "LCMapStringA" (ByVal Locale As Long, ByVal dwMapFlags As Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, ByVal lpDestStr As String, ByVal cchDest As Long) As Long
Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Declare Function GetTimeFormat Lib "kernel32" Alias "GetTimeFormatA" (ByVal Locale As Long, ByVal dwFlags As Long, lpTime As SYSTEMTIME, ByVal lpFormat As String, ByVal lpTimeStr As String, ByVal cchTime As Long) As Long
Declare Function GetDateFormat Lib "kernel32" Alias "GetDateFormatA" (ByVal Locale As Long, ByVal dwFlags As Long, lpDate As SYSTEMTIME, ByVal lpFormat As String, ByVal lpDateStr As String, ByVal cchDate As Long) As Long
Declare Function SetThreadLocale Lib "kernel32" Alias "SetThreadLocale" (ByVal Locale As Long) As Long
Declare Function GetSystemDefaultLangID Lib "kernel32" Alias "GetSystemDefaultLangID" () As Integer
Declare Function GetUserDefaultLangID Lib "kernel32" Alias "GetUserDefaultLangID" () As Integer
Declare Function GetSystemDefaultLCID Lib "kernel32" Alias "GetSystemDefaultLCID" () As Long
Declare Function GetUserDefaultLCID Lib "kernel32" Alias "GetUserDefaultLCID" () As Long

' API independientes de la configuracin regional

Declare Function GetStringTypeA Lib "kernel32" Alias "GetStringTypeA" (ByVal lcid As Long, ByVal dwInfoType As Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, lpCharType As Long) As Long
Declare Function FoldString Lib "kernel32" Alias "FoldStringA" (ByVal dwMapFlags As Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, ByVal lpDestStr As String, ByVal cchDest As Long) As Long

' *************************************************************************
' *                                                                         *
' * winnls.h -- Declaraciones, definiciones de constantes y macros del      *
' * procedimiento NLS                                                       *
' *                                                                         *
' * Copyright (c) 1991-1995, Microsoft Corp. Reservados todos los derechos. *
' *                                                                         *
' **************************************************************************/

' *  Tipos de calendario.
'  *
'  *  Estos tipos se usan para la rutina de la API de NLS GetALTCalendarInfoW.
'  */
Const MAX_DEFAULTCHAR = 2
Const CAL_ICALINTVALUE = &H1                     '  tipo de calendario
Const CAL_SCALNAME = &H2                         '  nombre nativo para calendario
Const CAL_IYEAROFFSETRANGE = &H3                 '  ao en que comienzan las eras
Const CAL_SERASTRING = &H4                       '  nombre de era para IYearOffsetRanges
Const CAL_SSHORTDATE = &H5                       '  cadena de formato de fecha en enteros
Const CAL_SLONGDATE = &H6                        '  cadena de formato de fecha larga
Const CAL_SDAYNAME1 = &H7                        '  nombre nativo para Lunes
Const CAL_SDAYNAME2 = &H8                        '  nombre nativo para Martes
Const CAL_SDAYNAME3 = &H9                        '  nombre nativo para Mircoles
Const CAL_SDAYNAME4 = &HA                        '  nombre nativo para Jueves
Const CAL_SDAYNAME5 = &HB                        '  nombre nativo para Viernes
Const CAL_SDAYNAME6 = &HC                        '  nombre nativo para Sbado
Const CAL_SDAYNAME7 = &HD                        '  nombre nativo para Domingo
Const CAL_SABBREVDAYNAME1 = &HE                  '  nombre abreviado para Lunes
Const CAL_SABBREVDAYNAME2 = &HF                  '  nombre abreviado para Martes
Const CAL_SABBREVDAYNAME3 = &H10                 '  nombre abreviado para Mircoles
Const CAL_SABBREVDAYNAME4 = &H11                 '  nombre abreviado para Jueves
Const CAL_SABBREVDAYNAME5 = &H12                 '  nombre abreviado para Viernes
Const CAL_SABBREVDAYNAME6 = &H13                 '  nombre abreviado para Sbado
Const CAL_SABBREVDAYNAME7 = &H14                 '  nombre abreviado para Domingo
Const CAL_SMONTHNAME1 = &H15                     '  nombre nativo para Enero
Const CAL_SMONTHNAME2 = &H16                     '  nombre nativo para Febrero
Const CAL_SMONTHNAME3 = &H17                     '  nombre nativo para Marzo
Const CAL_SMONTHNAME4 = &H18                     '  nombre nativo para Abril
Const CAL_SMONTHNAME5 = &H19                     '  nombre nativo para Mayo
Const CAL_SMONTHNAME6 = &H1A                     '  nombre nativo para Junio
Const CAL_SMONTHNAME7 = &H1B                     '  nombre nativo para Julio
Const CAL_SMONTHNAME8 = &H1C                     '  nombre nativo para Agosto
Const CAL_SMONTHNAME9 = &H1D                     '  nombre nativo para Septiembre
Const CAL_SMONTHNAME10 = &H1E                    '  nombre nativo para Octubre
Const CAL_SMONTHNAME11 = &H1F                    '  nombre nativo para Noviembre
Const CAL_SMONTHNAME12 = &H20                    '  nombre nativo para Diciembre
Const CAL_SMONTHNAME13 = &H21                    '  nombre nativo para el 13 mes (si hay)
Const CAL_SABBREVMONTHNAME1 = &H22               '  nombre abreviado para Enero
Const CAL_SABBREVMONTHNAME2 = &H23               '  nombre abreviado para Febrero
Const CAL_SABBREVMONTHNAME3 = &H24               '  nombre abreviado para Marzo
Const CAL_SABBREVMONTHNAME4 = &H25               '  nombre abreviado para Abril
Const CAL_SABBREVMONTHNAME5 = &H26               '  nombre abreviado para Mayo
Const CAL_SABBREVMONTHNAME6 = &H27               '  nombre abreviado para Junio
Const CAL_SABBREVMONTHNAME7 = &H28               '  nombre abreviado para Julio
Const CAL_SABBREVMONTHNAME8 = &H29               '  nombre abreviado para Agosto
Const CAL_SABBREVMONTHNAME9 = &H2A               '  nombre abreviado para Septiembre
Const CAL_SABBREVMONTHNAME10 = &H2B              '  nombre abreviado para Octubre
Const CAL_SABBREVMONTHNAME11 = &H2C              '  nombre abreviado para Noviembre
Const CAL_SABBREVMONTHNAME12 = &H2D              '  nombre abreviado para Diciembre
Const CAL_SABBREVMONTHNAME13 = &H2E              '  nombre abreviado para el 13 mes (si hay)

'
'  *  Valor de enumeracin del calendario.
'  */
Const ENUM_ALL_CALENDARS = &HFFFF                '  enumera todos los calendarios
'
'  *  Valores de Id. del calendario.
'  */
Const CAL_GREGORIAN = 1                 '  calendario gregoriano (traducido)
Const CAL_GREGORIAN_US = 2              '  calendario gregoriano (EE.UU.)
Const CAL_JAPAN = 3                     '  calendario japons de la era imperial
Const CAL_TAIWAN = 4                    '  calendario de la era de la Repblica China
Const CAL_KOREA = 5                     '  calendario coreano de la era Tangun

' *************************************************************************** Typedefs
' *
' * Defina aqu todos los tipos para el componente NLS.
' \***************************************************************************/
'
'  *  Informacin de CP.
'  */

Type CPINFO
        MaxCharSize As Long                    '  longitud mxima (en bytes) de un carcter
        DefaultChar(MAX_DEFAULTCHAR) As Byte   '  carcter predeterminado
        LeadByte(MAX_LEADBYTES) As Byte        '  intervalos de bit inicial
End Type

Type NUMBERFMT
        NumDigits As Long                 '  nmero de dgitos decimales
        LeadingZero As Long               '  si hay ceros iniciales en los campos decimales
        Grouping As Long                  '  tamao del grupo a la izquierda del decimal
        lpDecimalSep As String            '  puntero a la cadena del separador de decimales
        lpThousandSep As String           '  puntero a la cadena del separador de miles
        NegativeOrder As Long             '  orden de nmeros negativos
End Type
'
'  *  Formato de moneda.
'  */

Type CURRENCYFMT
        NumDigits As Long                '  nmero de dgitos decimales
        LeadingZero As Long              '  si hay cero inicial en los campos decimales
        Grouping As Long                 '  tamao del grupo a la izquierda del decimal
        lpDecimalSep As String           '  puntero a la cadena del separador de decimales
        lpThousandSep As String          '  puntero a la cadena del separador de miles
        NegativeOrder As Long            '  orden de moneda negativa
        PositiveOrder As Long            '  orden de moneda positiva
        lpCurrencySymbol As String       '  puntero a la cadena de smbolo de moneda
End Type

Declare Function EnumTimeFormats Lib "KERNEL32" Alias "EnumTimeFormats" (ByVal lpTimeFmtEnumProc As Long, ByVal Locale As Long, ByVal dwFlags As Long) As Long
Declare Function EnumDateFormats Lib "KERNEL32" Alias "EnumDateFormats" (ByVal lpDateFmtEnumProc As Long, ByVal Locale As Long, ByVal dwFlags As Long) As Long
Declare Function IsValidLocale Lib "KERNEL32" Alias "IsValidLocale" (ByVal Locale As Long, ByVal dwFlags As Long) As Long
Declare Function ConvertDefaultLocale Lib "KERNEL32" Alias "ConvertDefaultLocale" (ByVal Locale As Long) As Long
Declare Function GetThreadLocale Lib "KERNEL32" Alias "GetThreadLocale" () As Long
Declare Function EnumSystemLocales Lib "KERNEL32" Alias "EnumSystemLocales" (ByVal lpLocaleEnumProc As Long, ByVal dwFlags As Long) As Long
Declare Function EnumSystemCodePages Lib "KERNEL32" Alias "EnumSystemCodePages" (ByVal lpCodePageEnumProc As Long, ByVal dwFlags As Long) As Long

' La seccin siguiente contiene las estructuras de datos, tipos de datos y 
' procedimientos pblicos que exporta el subsistema de consola NT.

Type COORD
        x As Integer
        y As Integer
End Type

Type SMALL_RECT
        Left As Integer
        Top As Integer
        Right As Integer
        Bottom As Integer
End Type

Type KEY_EVENT_RECORD
        bKeyDown As Long
        wRepeatCount As Integer
        wVirtualKeyCode As Integer
        wVirtualScanCode As Integer
        uChar As Byte
        dwControlKeyState As Long
End Type

'  Indicadores de ControlKeyState 
Const RIGHT_ALT_PRESSED = &H1     '  est presionada la tecla ALT derecha.
Const LEFT_ALT_PRESSED = &H2      '  est presionada la tecla ALT izquierda.
Const RIGHT_CTRL_PRESSED = &H4    '  est presionada la tecla CTRL derecha.
Const LEFT_CTRL_PRESSED = &H8     '  est presionada la tecla CTRL izquierda.
Const SHIFT_PRESSED = &H10        '  est presionada la tecla MAYS.
Const NUMLOCK_ON = &H20           '  la luz de BLOQ. NM. est encendida.
Const SCROLLLOCK_ON = &H40        '  la luz de BLOQ. DESPL. est encendida.
Const CAPSLOCK_ON = &H80          '  la luz de BLOQ. MAYS. est encendida.
Const ENHANCED_KEY = &H100        '  la tecla est ampliada.

Type MOUSE_EVENT_RECORD
        dwMousePosition As COORD
        dwButtonState As Long
        dwControlKeyState As Long
        dwEventFlags As Long
End Type

'  Indicadores de ButtonState 
Const FROM_LEFT_1ST_BUTTON_PRESSED = &H1
Const RIGHTMOST_BUTTON_PRESSED = &H2
Const FROM_LEFT_2ND_BUTTON_PRESSED = &H4
Const FROM_LEFT_3RD_BUTTON_PRESSED = &H8
Const FROM_LEFT_4TH_BUTTON_PRESSED = &H10

'  Indicadores de evento
Const MOUSE_MOVED = &H1
Const DOUBLE_CLICK = &H2

Type WINDOW_BUFFER_SIZE_RECORD
        dwSize As COORD
End Type

Type MENU_EVENT_RECORD
        dwCommandId As Long
End Type

Type FOCUS_EVENT_RECORD
        bSetFocus As Long
End Type

'   Indicadores de EventType:
Const KEY_EVENT = &H1        '  el evento contiene un registro de evento de tecla
Const mouse_eventC = &H2     '  el evento contiene un registro de evento de mouse
Const WINDOW_BUFFER_SIZE_EVENT = &H4     '  el evento contiene un registro de evento de cambio de ventana
Const MENU_EVENT = &H8       '  el evento contiene un registro de evento de men
Const FOCUS_EVENT = &H10     '  el evento contiene un cambio de enfoque

Type CHAR_INFO
        Char As Integer
        Attributes As Integer
End Type

'  Indicadores de atributos:
Const FOREGROUND_BLUE = &H1        '  el color del texto contiene azul.
Const FOREGROUND_GREEN = &H2       '  el color del texto contiene verde.
Const FOREGROUND_RED = &H4         '  el color del texto contiene rojo.
Const FOREGROUND_INTENSITY = &H8   '  el color del texto est intensificado.
Const BACKGROUND_BLUE = &H10       '  el color del fondo contiene azul.
Const BACKGROUND_GREEN = &H20      '  el color del fondo contiene verde.
Const BACKGROUND_RED = &H40        '  el color del fondo contiene rojo.
Const BACKGROUND_INTENSITY = &H80  '  el color del fondo est intensificado.

Type CONSOLE_SCREEN_BUFFER_INFO
        dwSize As COORD
        dwCursorPosition As COORD
        wAttributes As Integer
        srWindow As SMALL_RECT
        dwMaximumWindowSize As COORD
End Type

Type CONSOLE_CURSOR_INFO
        dwSize As Long
        bVisible As Long
End Type

Const CTRL_C_EVENT = 0
Const CTRL_BREAK_EVENT = 1
Const CTRL_CLOSE_EVENT = 2
'  3 est reservado
'  4 est reservado
Const CTRL_LOGOFF_EVENT = 5
Const CTRL_SHUTDOWN_EVENT = 6

' Indicadores de modo de entrada:
Const ENABLE_PROCESSED_INPUT = &H1
Const ENABLE_LINE_INPUT = &H2
Const ENABLE_ECHO_INPUT = &H4
Const ENABLE_WINDOW_INPUT = &H8
Const ENABLE_MOUSE_INPUT = &H10

' Indicadores de modo de salida:
Const ENABLE_PROCESSED_OUTPUT = &H1
Const ENABLE_WRAP_AT_EOL_OUTPUT = &H2

Declare Function ReadConsoleOutput Lib "kernel32" Alias "ReadConsoleOutputA" (ByVal hConsoleOutput As Long, lpBuffer As CHAR_INFO, dwBufferSize As COORD, dwBufferCoord As COORD, lpReadRegion As SMALL_RECT) As Long
Declare Function WriteConsoleOutput Lib "kernel32" Alias "WriteConsoleOutputA" (ByVal hConsoleOutput As Long, lpBuffer As CHAR_INFO, dwBufferSize As COORD, dwBufferCoord As COORD, lpWriteRegion As SMALL_RECT) As Long
Declare Function ReadConsoleOutputCharacter Lib "kernel32" Alias "ReadConsoleOutputCharacterA" (ByVal hConsoleOutput As Long, ByVal lpCharacter As String, ByVal nLength As Long, dwReadCoord As COORD, lpNumberOfCharsRead As Long) As Long
Declare Function ReadConsoleOutputAttribute Lib "kernel32" Alias "ReadConsoleOutputAttribute" (ByVal hConsoleOutput As Long, lpAttribute As Long, ByVal nLength As Long, dwReadCoord As COORD, lpNumberOfAttrsRead As Long) As Long
Declare Function WriteConsoleOutputCharacter Lib "kernel32" Alias "WriteConsoleOutputCharacterA" (ByVal hConsoleOutput As Long, ByVal lpCharacter As String, ByVal nLength As Long, dwWriteCoord As COORD, lpNumberOfCharsWritten As Long) As Long

Declare Function WriteConsoleOutputAttribute Lib "kernel32" Alias "WriteConsoleOutputAttribute" (ByVal hConsoleOutput As Long, lpAttribute As Integer, ByVal nLength As Long, dwWriteCoord As COORD, lpNumberOfAttrsWritten As Long) As Long
Declare Function FillConsoleOutputCharacter Lib "kernel32" Alias "FillConsoleOutputCharacterA" (ByVal hConsoleOutput As Long, ByVal cCharacter As Byte, ByVal nLength As Long, dwWriteCoord As COORD, lpNumberOfCharsWritten As Long) As Long
Declare Function FillConsoleOutputAttribute Lib "kernel32" Alias "FillConsoleOutputAttribute" (ByVal hConsoleOutput As Long, ByVal wAttribute As Long, ByVal nLength As Long, dwWriteCoord As COORD, lpNumberOfAttrsWritten As Long) As Long
Declare Function GetConsoleMode Lib "kernel32" Alias "GetConsoleMode" (ByVal hConsoleHandle As Long, lpMode As Long) As Long
Declare Function GetNumberOfConsoleInputEvents Lib "kernel32" Alias "GetNumberOfConsoleInputEvents" (ByVal hConsoleInput As Long, lpNumberOfEvents As Long) As Long
Declare Function GetConsoleScreenBufferInfo Lib "kernel32" Alias "GetConsoleScreenBufferInfo" (ByVal hConsoleOutput As Long, lpConsoleScreenBufferInfo As CONSOLE_SCREEN_BUFFER_INFO) As Long
Declare Function GetLargestConsoleWindowSize Lib "kernel32" Alias "GetLargestConsoleWindowSize" (ByVal hConsoleOutput As Long) As COORD
Declare Function GetConsoleCursorInfo Lib "kernel32" Alias "GetConsoleCursorInfo" (ByVal hConsoleOutput As Long, lpConsoleCursorInfo As CONSOLE_CURSOR_INFO) As Long
Declare Function GetNumberOfConsoleMouseButtons Lib "kernel32" Alias "GetNumberOfConsoleMouseButtons" (lpNumberOfMouseButtons As Long) As Long
Declare Function SetConsoleMode Lib "kernel32" Alias "SetConsoleMode" (ByVal hConsoleHandle As Long, ByVal dwMode As Long) As Long
Declare Function SetConsoleActiveScreenBuffer Lib "kernel32" Alias "SetConsoleActiveScreenBuffer" (ByVal hConsoleOutput As Long) As Long
Declare Function FlushConsoleInputBuffer Lib "kernel32" Alias "FlushConsoleInputBuffer" (ByVal hConsoleInput As Long) As Long
Declare Function SetConsoleScreenBufferSize Lib "kernel32" Alias "SetConsoleScreenBufferSize" (ByVal hConsoleOutput As Long, dwSize As COORD) As Long
Declare Function SetConsoleCursorPosition Lib "kernel32" Alias "SetConsoleCursorPosition" (ByVal hConsoleOutput As Long, dwCursorPosition As COORD) As Long
Declare Function SetConsoleCursorInfo Lib "kernel32" Alias "SetConsoleCursorInfo" (ByVal hConsoleOutput As Long, lpConsoleCursorInfo As CONSOLE_CURSOR_INFO) As Long
Declare Function ScrollConsoleScreenBuffer Lib "kernel32" Alias "ScrollConsoleScreenBufferA" (ByVal hConsoleOutput As Long, lpScrollRectangle As SMALL_RECT, lpClipRectangle As SMALL_RECT, dwDestinationOrigin As COORD, lpFill As CHAR_INFO) As Long
Declare Function SetConsoleWindowInfo Lib "kernel32" Alias "SetConsoleWindowInfo" (ByVal hConsoleOutput As Long, ByVal bAbsolute As Long, lpConsoleWindow As SMALL_RECT) As Long
Declare Function SetConsoleTextAttribute Lib "kernel32" Alias "SetConsoleTextAttribute" (ByVal hConsoleOutput As Long, ByVal wAttributes As Long) As Long
Declare Function SetConsoleCtrlHandler Lib "kernel32" Alias "SetConsoleCtrlHandler" (ByVal HandlerRoutine As Long, ByVal Add As Long) As Long
Declare Function GenerateConsoleCtrlEvent Lib "kernel32" Alias "GenerateConsoleCtrlEvent" (ByVal dwCtrlEvent As Long, ByVal dwProcessGroupId As Long) As Long
Declare Function AllocConsole Lib "kernel32" Alias "AllocConsole" () As Long
Declare Function FreeConsole Lib "kernel32" Alias "FreeConsole" () As Long
Declare Function GetConsoleTitle Lib "kernel32" Alias "GetConsoleTitleA" (ByVal lpConsoleTitle As String, ByVal nSize As Long) As Long
Declare Function SetConsoleTitle Lib "kernel32" Alias "SetConsoleTitleA" (ByVal lpConsoleTitle As String) As Long
Declare Function ReadConsole Lib "kernel32" Alias "ReadConsoleA" (ByVal hConsoleInput As Long, lpBuffer As Any, ByVal nNumberOfCharsToRead As Long, lpNumberOfCharsRead As Long, lpReserved As Any) As Long
Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" (ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, lpReserved As Any) As Long

Const CONSOLE_TEXTMODE_BUFFER = 1

Declare Function CreateConsoleScreenBuffer Lib "kernel32" Alias "CreateConsoleScreenBuffer" (ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwFlags As Long, lpScreenBufferData As Any) As Long
Declare Function GetConsoleCP Lib "kernel32" Alias "GetConsoleCP" () As Long
Declare Function SetConsoleCP Lib "kernel32" Alias "SetConsoleCP" (ByVal wCodePageID As Long) As Long
Declare Function GetConsoleOutputCP Lib "kernel32" Alias "GetConsoleOutputCP" () As Long
Declare Function SetConsoleOutputCP Lib "kernel32" Alias "SetConsoleOutputCP" (ByVal wCodePageID As Long) As Long


' ---------------
'  Seccin de GDI 
' ---------------

' Operaciones del explorador binario
Const R2_BLACK = 1       '   0
Const R2_NOTMERGEPEN = 2 '  DPon
Const R2_MASKNOTPEN = 3  '  DPna
Const R2_NOTCOPYPEN = 4  '  PN
Const R2_MASKPENNOT = 5  '  PDna
Const R2_NOT = 6 '  Dn
Const R2_XORPEN = 7      '  DPx
Const R2_NOTMASKPEN = 8  '  DPan
Const R2_MASKPEN = 9     '  DPa
Const R2_NOTXORPEN = 10  '  DPxn
Const R2_NOP = 11        '  D
Const R2_MERGENOTPEN = 12        '  DPno
Const R2_COPYPEN = 13    '  P
Const R2_MERGEPENNOT = 14        '  PDno
Const R2_MERGEPEN = 15   '  DPo
Const R2_WHITE = 16      '   1
Const R2_LAST = 16

'  Operaciones del explorador ternario
Const SRCCOPY = &HCC0020  	    ' (DWORD) dest = origen
Const SRCPAINT = &HEE0086        ' (DWORD) dest = origen OR dest
Const SRCAND = &H8800C6          ' (DWORD) dest = origen AND dest
Const SRCINVERT = &H660046       ' (DWORD) dest = origen XOR dest
Const SRCERASE = &H440328        ' (DWORD) dest = origen AND (NOT dest)
Const NOTSRCCOPY = &H330008      ' (DWORD) dest = (NOT origen)
Const NOTSRCERASE = &H1100A6     ' (DWORD) dest = (NOT origen) AND (NOT dest)
Const MERGECOPY = &HC000CA       ' (DWORD) dest = (origen AND patrn)
Const MERGEPAINT = &HBB0226      ' (DWORD) dest = (NOT origen) OR dest
Const PATCOPY = &HF00021         ' (DWORD) dest = patrn
Const PATPAINT = &HFB0A09        ' (DWORD) dest = DPSnoo
Const PATINVERT = &H5A0049       ' (DWORD) dest = patrn XOR dest
Const DSTINVERT = &H550009       ' (DWORD) dest = (NOT dest)
Const BLACKNESS = &H42           ' (DWORD) dest = BLACK
Const WHITENESS = &HFF0062       ' (DWORD) dest = WHITE

Const GDI_ERROR = &HFFFF
Const HGDI_ERROR = &HFFFF

' Indicadores de regin
Const ERRORAPI = 0
Const NULLREGION = 1
Const SIMPLEREGION = 2
Const COMPLEXREGION = 3

' Estilos de CombineRgn() 
Const RGN_AND = 1
Const RGN_OR = 2
Const RGN_XOR = 3
Const RGN_DIFF = 4
Const RGN_COPY = 5
Const RGN_MIN = RGN_AND
Const RGN_MAX = RGN_COPY

' Modos de StretchBlt() 
Const BLACKONWHITE = 1
Const WHITEONBLACK = 2
Const COLORONCOLOR = 3
Const HALFTONE = 4
Const MAXSTRETCHBLTMODE = 4

' Modos de PolyFill()
Const ALTERNATE = 1
Const WINDING = 2
Const POLYFILL_LAST = 2

' Opciones de alineacin de texto
Const TA_NOUPDATECP = 0
Const TA_UPDATECP = 1

Const TA_LEFT = 0
Const TA_RIGHT = 2
Const TA_CENTER = 6

Const TA_TOP = 0
Const TA_BOTTOM = 8
Const TA_BASELINE = 24
Const TA_MASK = (TA_BASELINE + TA_CENTER + TA_UPDATECP)

Const VTA_BASELINE = TA_BASELINE
Const VTA_LEFT = TA_BOTTOM
Const VTA_RIGHT = TA_TOP
Const VTA_CENTER = TA_CENTER
Const VTA_BOTTOM = TA_RIGHT
Const VTA_TOP = TA_LEFT

Const ETO_GRAYED = 1
Const ETO_OPAQUE = 2
Const ETO_CLIPPED = 4

Const ASPECT_FILTERING = &H1

Const DCB_RESET = &H1
Const DCB_ACCUMULATE = &H2
Const DCB_DIRTY = DCB_ACCUMULATE
Const DCB_SET = (DCB_RESET Or DCB_ACCUMULATE)
Const DCB_ENABLE = &H4
Const DCB_DISABLE = &H8

' Funciones de metarchivo
Const META_SETBKCOLOR = &H201
Const META_SETBKMODE = &H102
Const META_SETMAPMODE = &H103
Const META_SETROP2 = &H104
Const META_SETRELABS = &H105
Const META_SETPOLYFILLMODE = &H106
Const META_SETSTRETCHBLTMODE = &H107
Const META_SETTEXTCHAREXTRA = &H108
Const META_SETTEXTCOLOR = &H209
Const META_SETTEXTJUSTIFICATION = &H20A
Const META_SETWINDOWORG = &H20B
Const META_SETWINDOWEXT = &H20C
Const META_SETVIEWPORTORG = &H20D
Const META_SETVIEWPORTEXT = &H20E
Const META_OFFSETWINDOWORG = &H20F
Const META_SCALEWINDOWEXT = &H410
Const META_OFFSETVIEWPORTORG = &H211
Const META_SCALEVIEWPORTEXT = &H412
Const META_LINETO = &H213
Const META_MOVETO = &H214
Const META_EXCLUDECLIPRECT = &H415
Const META_INTERSECTCLIPRECT = &H416
Const META_ARC = &H817
Const META_ELLIPSE = &H418
Const META_FLOODFILL = &H419
Const META_PIE = &H81A
Const META_RECTANGLE = &H41B
Const META_ROUNDRECT = &H61C
Const META_PATBLT = &H61D
Const META_SAVEDC = &H1E
Const META_SETPIXEL = &H41F
Const META_OFFSETCLIPRGN = &H220
Const META_TEXTOUT = &H521
Const META_BITBLT = &H922
Const META_STRETCHBLT = &HB23
Const META_POLYGON = &H324
Const META_POLYLINE = &H325
Const META_ESCAPE = &H626
Const META_RESTOREDC = &H127
Const META_FILLREGION = &H228
Const META_FRAMEREGION = &H429
Const META_INVERTREGION = &H12A
Const META_PAINTREGION = &H12B
Const META_SELECTCLIPREGION = &H12C
Const META_SELECTOBJECT = &H12D
Const META_SETTEXTALIGN = &H12E
Const META_CHORD = &H830
Const META_SETMAPPERFLAGS = &H231
Const META_EXTTEXTOUT = &HA32
Const META_SETDIBTODEV = &HD33
Const META_SELECTPALETTE = &H234
Const META_REALIZEPALETTE = &H35
Const META_ANIMATEPALETTE = &H436
Const META_SETPALENTRIES = &H37
Const META_POLYPOLYGON = &H538
Const META_RESIZEPALETTE = &H139
Const META_DIBBITBLT = &H940
Const META_DIBSTRETCHBLT = &HB41
Const META_DIBCREATEPATTERNBRUSH = &H142
Const META_STRETCHDIB = &HF43
Const META_EXTFLOODFILL = &H548
Const META_DELETEOBJECT = &H1F0
Const META_CREATEPALETTE = &HF7
Const META_CREATEPATTERNBRUSH = &H1F9
Const META_CREATEPENINDIRECT = &H2FA
Const META_CREATEFONTINDIRECT = &H2FB
Const META_CREATEBRUSHINDIRECT = &H2FC
Const META_CREATEREGION = &H6FF


' Escapes de GDI
Const NEWFRAME = 1
Const AbortDocC = 2
Const NEXTBAND = 3
Const SETCOLORTABLE = 4
Const GETCOLORTABLE = 5
Const FLUSHOUTPUT = 6
Const DRAFTMODE = 7
Const QUERYESCSUPPORT = 8
Const SETABORTPROC = 9
Const StartDocC = 10
Const EndDocC = 11
Const GETPHYSPAGESIZE = 12
Const GETPRINTINGOFFSET = 13
Const GETSCALINGFACTOR = 14
Const MFCOMMENT = 15
Const GETPENWIDTH = 16
Const SETCOPYCOUNT = 17
Const SELECTPAPERSOURCE = 18
Const DEVICEDATA = 19
Const PASSTHROUGH = 19
Const GETTECHNOLGY = 20
Const GETTECHNOLOGY = 20
Const SETLINECAP = 21
Const SETLINEJOIN = 22
Const SetMiterLimitC = 23
Const BANDINFO = 24
Const DRAWPATTERNRECT = 25
Const GETVECTORPENSIZE = 26
Const GETVECTORBRUSHSIZE = 27
Const ENABLEDUPLEX = 28
Const GETSETPAPERBINS = 29
Const GETSETPRINTORIENT = 30
Const ENUMPAPERBINS = 31
Const SETDIBSCALING = 32
Const EPSPRINTING = 33
Const ENUMPAPERMETRICS = 34
Const GETSETPAPERMETRICS = 35
Const POSTSCRIPT_DATA = 37
Const POSTSCRIPT_IGNORE = 38
Const MOUSETRAILS = 39
Const GETDEVICEUNITS = 42

Const GETEXTENDEDTEXTMETRICS = 256
Const GETEXTENTTABLE = 257
Const GETPAIRKERNTABLE = 258
Const GETTRACKKERNTABLE = 259
Const ExtTextOutC = 512
Const GETFACENAME = 513
Const DOWNLOADFACE = 514
Const ENABLERELATIVEWIDTHS = 768
Const ENABLEPAIRKERNING = 769
Const SETKERNTRACK = 770
Const SETALLJUSTVALUES = 771
Const SETCHARSET = 772

Const StretchBltC = 2048
Const GETSETSCREENPARAMS = 3072
Const BEGIN_PATH = 4096
Const CLIP_TO_PATH = 4097
Const END_PATH = 4098
Const EXT_DEVICE_CAPS = 4099
Const RESTORE_CTM = 4100
Const SAVE_CTM = 4101
Const SET_ARC_DIRECTION = 4102
Const SET_BACKGROUND_COLOR = 4103
Const SET_POLY_MODE = 4104
Const SET_SCREEN_ANGLE = 4105
Const SET_SPREAD = 4106
Const TRANSFORM_CTM = 4107
Const SET_CLIP_BOX = 4108
Const SET_BOUNDS = 4109
Const SET_MIRROR_MODE = 4110
Const OPENCHANNEL = 4110
Const DOWNLOADHEADER = 4111
Const CLOSECHANNEL = 4112
Const POSTSCRIPT_PASSTHROUGH = 4115
Const ENCAPSULATED_POSTSCRIPT = 4116

' Cdigos de error del administrador de la cola de impresin
Const SP_NOTREPORTED = &H4000
Const SP_ERROR = (-1)
Const SP_APPABORT = (-2)
Const SP_USERABORT = (-3)
Const SP_OUTOFDISK = (-4)
Const SP_OUTOFMEMORY = (-5)

Const PR_JOBSTATUS = &H0

'  Definiciones de objetos para EnumObjects()
Const OBJ_PEN = 1
Const OBJ_BRUSH = 2
Const OBJ_DC = 3
Const OBJ_METADC = 4
Const OBJ_PAL = 5
Const OBJ_FONT = 6
Const OBJ_BITMAP = 7
Const OBJ_REGION = 8
Const OBJ_METAFILE = 9
Const OBJ_MEMDC = 10
Const OBJ_EXTPEN = 11
Const OBJ_ENHMETADC = 12
Const OBJ_ENHMETAFILE = 13

'  xform 
Const MWT_IDENTITY = 1
Const MWT_LEFTMULTIPLY = 2
Const MWT_RIGHTMULTIPLY = 3

Const MWT_MIN = MWT_IDENTITY
Const MWT_MAX = MWT_RIGHTMULTIPLY

Type XFORM
        eM11 As Double
        eM12 As Double
        eM21 As Double
        eM22 As Double
        eDx As Double
        eDy As Double
End Type

' Definicin del encabezado del mapa de bits
Type BITMAP '14 bytes
        bmType As Long
        bmWidth As Long
        bmHeight As Long
        bmWidthBytes As Long
        bmPlanes As Integer
        bmBitsPixel As Integer
        bmBits As Long
End Type

Type RGBTRIPLE
        rgbtBlue As Byte
        rgbtGreen As Byte
        rgbtRed As Byte
End Type

Type RGBQUAD
        rgbBlue As Byte
        rgbGreen As Byte
        rgbRed As Byte
        rgbReserved As Byte
End Type

' Estructuras para definir los DIB
Type BITMAPCOREHEADER '12 bytes
        bcSize As Long
        bcWidth As Integer
        bcHeight As Integer
        bcPlanes As Integer
        bcBitCount As Integer
End Type

Type BITMAPINFOHEADER '40 bytes
        biSize As Long
        biWidth As Long
        biHeight As Long
        biPlanes As Integer
        biBitCount As Integer
        biCompression As Long
        biSizeImage As Long
        biXPelsPerMeter As Long
        biYPelsPerMeter As Long
        biClrUsed As Long
        biClrImportant As Long
End Type

' Constantes para el campo biCompression
Const BI_RGB = 0&
Const BI_RLE8 = 1&
Const BI_RLE4 = 2&
Const BI_bitfields = 3&

Type BITMAPINFO
        bmiHeader As BITMAPINFOHEADER
        bmiColors As RGBQUAD
End Type

Type BITMAPCOREINFO
        bmciHeader As BITMAPCOREHEADER
        bmciColors As RGBTRIPLE
End Type

Type BITMAPFILEHEADER
        bfType As Integer
        bfSize As Long
        bfReserved1 As Integer
        bfReserved2 As Integer
        bfOffBits As Long
End Type


' Estructura de la imagen de metarchivo del Portapapeles 
Type HANDLETABLE
        objectHandle(1) As Long
End Type

Type METARECORD
        rdSize As Long
        rdFunction As Integer
        rdParm(1) As Integer
End Type


Type METAFILEPICT
        mm As Long
        xExt As Long
        yExt As Long
        hMF As Long
End Type

Type METAHEADER
        mtType As Integer
        mtHeaderSize As Integer
        mtVersion As Integer
        mtSize As Long
        mtNoObjects As Integer
        mtMaxRecord As Long
        mtNoParameters As Integer
End Type

Type ENHMETARECORD
        iType As Long
        nSize As Long
        dParm(1) As Long
End Type

Type SIZEL
    cx As Long
    cy As Long
End Type

Type ENHMETAHEADER
        iType As Long
        nSize As Long
        rclBounds As RECTL
        rclFrame As RECTL
        dSignature As Long
        nVersion As Long
        nBytes As Long
        nRecords As Long
        nHandles As Integer
        sReserved As Integer
        nDescription As Long
        offDescription As Long
        nPalEntries As Long
        szlDevice As SIZEL
        szlMillimeters As SIZEL
End Type

Type TEXTMETRIC
        tmHeight As Long
        tmAscent As Long
        tmDescent As Long
        tmInternalLeading As Long
        tmExternalLeading As Long
        tmAveCharWidth As Long
        tmMaxCharWidth As Long
        tmWeight As Long
        tmOverhang As Long
        tmDigitizedAspectX As Long
        tmDigitizedAspectY As Long
        tmFirstChar As Byte
        tmLastChar As Byte
        tmDefaultChar As Byte
        tmBreakChar As Byte
        tmItalic As Byte
        tmUnderlined As Byte
        tmStruckOut As Byte
        tmPitchAndFamily As Byte
        tmCharSet As Byte
End Type

' indicadores del campo ntmFlags
Const NTM_REGULAR = &H40&
Const NTM_BOLD = &H20&
Const NTM_ITALIC = &H1&

' Estructura que se pasa a FONTENUMPROC
' NOTA: NEWTEXTMETRIC es lo mismo que TEXTMETRIC ms 4 campos nuevos
Type NEWTEXTMETRIC
        tmHeight As Long
        tmAscent As Long
        tmDescent As Long
        tmInternalLeading As Long
        tmExternalLeading As Long
        tmAveCharWidth As Long
        tmMaxCharWidth As Long
        tmWeight As Long
        tmOverhang As Long
        tmDigitizedAspectX As Long
        tmDigitizedAspectY As Long
        tmFirstChar As Byte
        tmLastChar As Byte
        tmDefaultChar As Byte
        tmBreakChar As Byte
        tmItalic As Byte
        tmUnderlined As Byte
        tmStruckOut As Byte
        tmPitchAndFamily As Byte
        tmCharSet As Byte
        ntmFlags As Long
        ntmSizeEM As Long
        ntmCellHeight As Long
        ntmAveWidth As Long
End Type

'  Indicadores de tmPitchAndFamily
Const TMPF_FIXED_PITCH = &H1
Const TMPF_VECTOR = &H2
Const TMPF_DEVICE = &H8
Const TMPF_TRUETYPE = &H4


' Objetos lgicos GDI:

Type PELARRAY
        paXCount As Long
        paYCount As Long
        paXExt As Long
        paYExt As Long
        paRGBs As Integer
End Type

' Pincel lgico (o patrn)
Type LOGBRUSH
        lbStyle As Long
        lbColor As Long
        lbHatch As Long
End Type

' Lpiz lgico
Type LOGPEN
        lopnStyle As Long
        lopnWidth As POINTAPI
        lopnColor As Long
End Type

Type EXTLOGPEN
        elpPenStyle As Long
        elpWidth As Long
        elpBrushStyle As Long
        elpColor As Long
        elpHatch As Long
        elpNumEntries As Long
        elpStyleEntry(1) As Long
End Type

Type PALETTEENTRY
        peRed As Byte
        peGreen As Byte
        peBlue As Byte
        peFlags As Byte
End Type

' Paleta lgica
Type LOGPALETTE
        palVersion As Integer
        palNumEntries As Integer
        palPalEntry(1) As PALETTEENTRY
End Type

' Fuente lgica
Const LF_FACESIZE = 32
Const LF_FULLFACESIZE = 64

Type LOGFONT
        lfHeight As Long
        lfWidth As Long
        lfEscapement As Long
        lfOrientation As Long
        lfWeight As Long
        lfItalic As Byte
        lfUnderline As Byte
        lfStrikeOut As Byte
        lfCharSet As Byte
        lfOutPrecision As Byte
        lfClipPrecision As Byte
        lfQuality As Byte
        lfPitchAndFamily As Byte
        lfFaceName(1 To LF_FACESIZE) As Byte
End Type

Type NONCLIENTMETRICS
        cbSize As Long
        iBorderWidth As Long
        iScrollWidth As Long
        iScrollHeight As Long
        iCaptionWidth As Long
        iCaptionHeight As Long
        lfCaptionFont As LOGFONT
        iSMCaptionWidth As Long
        iSMCaptionHeight As Long
        lfSMCaptionFont As LOGFONT
        iMenuWidth As Long
        iMenuHeight As Long
        lfMenuFont As LOGFONT
        lfStatusFont As LOGFONT
        lfMessageFont As LOGFONT
End Type

Type ENUMLOGFONT
        elfLogFont As LOGFONT
        elfFullName(LF_FULLFACESIZE) As Byte
        elfStyle(LF_FACESIZE) As Byte
End Type

Const OUT_DEFAULT_PRECIS = 0
Const OUT_STRING_PRECIS = 1
Const OUT_CHARACTER_PRECIS = 2
Const OUT_STROKE_PRECIS = 3
Const OUT_TT_PRECIS = 4
Const OUT_DEVICE_PRECIS = 5
Const OUT_RASTER_PRECIS = 6
Const OUT_TT_ONLY_PRECIS = 7
Const OUT_OUTLINE_PRECIS = 8

Const CLIP_DEFAULT_PRECIS = 0
Const CLIP_CHARACTER_PRECIS = 1
Const CLIP_STROKE_PRECIS = 2
Const CLIP_MASK = &HF
Const CLIP_LH_ANGLES = 16
Const CLIP_TT_ALWAYS = 32
Const CLIP_EMBEDDED = 128

Const DEFAULT_QUALITY = 0
Const DRAFT_QUALITY = 1
Const PROOF_QUALITY = 2

Const DEFAULT_PITCH = 0
Const FIXED_PITCH = 1
Const VARIABLE_PITCH = 2

Const ANSI_CHARSET = 0
Const DEFAULT_CHARSET = 1
Const SYMBOL_CHARSET = 2
Const SHIFTJIS_CHARSET = 128
Const HANGEUL_CHARSET = 129
Const CHINESEBIG5_CHARSET = 136
Const OEM_CHARSET = 255

' Familias de fuentes
'
Const FF_DONTCARE = 0    '  No se sabe o no importa.
Const FF_ROMAN = 16      '  Ancho de trazo variable, con serif.

' Times Roman, Century Schoolbook, etc.
Const FF_SWISS = 32      '  Ancho de trazo variable, sin serif.

' Helvetica, Swiss, etc.
Const FF_MODERN = 48     '  Ancho de trazo constante, con o sin serif.

' Pica, Elite, Courier, etc.
Const FF_SCRIPT = 64     '  Cursiva, etc.
Const FF_DECORATIVE = 80 '  Old English, etc.

' Pesos de la fuente 
Const FW_DONTCARE = 0
Const FW_THIN = 100
Const FW_EXTRALIGHT = 200
Const FW_LIGHT = 300
Const FW_NORMAL = 400
Const FW_MEDIUM = 500
Const FW_SEMIBOLD = 600
Const FW_BOLD = 700
Const FW_EXTRABOLD = 800
Const FW_HEAVY = 900

Const FW_ULTRALIGHT = FW_EXTRALIGHT
Const FW_REGULAR = FW_NORMAL
Const FW_DEMIBOLD = FW_SEMIBOLD
Const FW_ULTRABOLD = FW_EXTRABOLD
Const FW_BLACK = FW_HEAVY

Const PANOSE_COUNT = 10
Const PAN_FAMILYTYPE_INDEX = 0
Const PAN_SERIFSTYLE_INDEX = 1
Const PAN_WEIGHT_INDEX = 2
Const PAN_PROPORTION_INDEX = 3
Const PAN_CONTRAST_INDEX = 4
Const PAN_STROKEVARIATION_INDEX = 5
Const PAN_ARMSTYLE_INDEX = 6
Const PAN_LETTERFORM_INDEX = 7
Const PAN_MIDLINE_INDEX = 8
Const PAN_XHEIGHT_INDEX = 9

Const PAN_CULTURE_LATIN = 0

Type PANOSE
        ulculture As Long
        bFamilyType As Byte
        bSerifStyle As Byte
        bWeight As Byte
        bProportion As Byte
        bContrast As Byte
        bStrokeVariation As Byte
        bArmStyle As Byte
        bLetterform As Byte
        bMidline As Byte
        bXHeight As Byte
End Type

Const PAN_ANY = 0  '  Cualquiera
Const PAN_NO_FIT = 1  '  Sin encajar

Const PAN_FAMILY_TEXT_DISPLAY = 2  '  Texto y pantalla
Const PAN_FAMILY_SCRIPT = 3  '  ndice
Const PAN_FAMILY_DECORATIVE = 4  '  Decorativa
Const PAN_FAMILY_PICTORIAL = 5  '  Pictrica

Const PAN_SERIF_COVE = 2  '  Cove
Const PAN_SERIF_OBTUSE_COVE = 3  '  Cove obtusa
Const PAN_SERIF_SQUARE_COVE = 4  '  Cove cuadrada
Const PAN_SERIF_OBTUSE_SQUARE_COVE = 5  '  Cove obtusa cuadrada
Const PAN_SERIF_SQUARE = 6  '  Cuadrada
Const PAN_SERIF_THIN = 7  '  Delgada
Const PAN_SERIF_BONE = 8  '  Hueso
Const PAN_SERIF_EXAGGERATED = 9  '  Exagerada
Const PAN_SERIF_TRIANGLE = 10  '  Tringulo
Const PAN_SERIF_NORMAL_SANS = 11  '  Sans normal
Const PAN_SERIF_OBTUSE_SANS = 12  '  Sans obtusa
Const PAN_SERIF_PERP_SANS = 13  '  Sans prep
Const PAN_SERIF_FLARED = 14  '  Ensanchada
Const PAN_SERIF_ROUNDED = 15  '  Redondeada

Const PAN_WEIGHT_VERY_LIGHT = 2  '  Muy claro
Const PAN_WEIGHT_LIGHT = 3  '  Claro
Const PAN_WEIGHT_THIN = 4  '  Delgado
Const PAN_WEIGHT_BOOK = 5  '  Libro
Const PAN_WEIGHT_MEDIUM = 6  '  Medio
Const PAN_WEIGHT_DEMI = 7  '  Semi
Const PAN_WEIGHT_BOLD = 8  '  Negrita
Const PAN_WEIGHT_HEAVY = 9  '  Fuerte
Const PAN_WEIGHT_BLACK = 10  '  Negro
Const PAN_WEIGHT_NORD = 11  '  Nord

Const PAN_PROP_OLD_STYLE = 2  '  Old Style
Const PAN_PROP_MODERN = 3  '  Modern
Const PAN_PROP_EVEN_WIDTH = 4  '  Ancho igualado
Const PAN_PROP_EXPANDED = 5  '  Expandida
Const PAN_PROP_CONDENSED = 6  '  Condensada
Const PAN_PROP_VERY_EXPANDED = 7  '  Muy expandida
Const PAN_PROP_VERY_CONDENSED = 8  '  Muy condensada
Const PAN_PROP_MONOSPACED = 9  '  Monoespaciada

Const PAN_CONTRAST_NONE = 2  '  Ninguno
Const PAN_CONTRAST_VERY_LOW = 3  '  Muy bajo
Const PAN_CONTRAST_LOW = 4  '  Bajo
Const PAN_CONTRAST_MEDIUM_LOW = 5  '  Medio bajo
Const PAN_CONTRAST_MEDIUM = 6  '  Medio
Const PAN_CONTRAST_MEDIUM_HIGH = 7  '  Medio alto
Const PAN_CONTRAST_HIGH = 8  '  Alto
Const PAN_CONTRAST_VERY_HIGH = 9  '  Muy alto

Const PAN_STROKE_GRADUAL_DIAG = 2  '  Gradual/Diagonal
Const PAN_STROKE_GRADUAL_TRAN = 3  '  Gradual/Transicional
Const PAN_STROKE_GRADUAL_VERT = 4  '  Gradual/Vertical
Const PAN_STROKE_GRADUAL_HORZ = 5  '  Gradual/Horizontal
Const PAN_STROKE_RAPID_VERT = 6    '  Rpido/Vertical
Const PAN_STROKE_RAPID_HORZ = 7    '  Rpido/Horizontal
Const PAN_STROKE_INSTANT_VERT = 8  '  Instantneo/Vertical

Const PAN_STRAIGHT_ARMS_HORZ = 2  '  Brazos rectos/Horizontal
Const PAN_STRAIGHT_ARMS_WEDGE = 3  '  Brazos rectos/Cua
Const PAN_STRAIGHT_ARMS_VERT = 4  '  Brazos rectos/Vertical
Const PAN_STRAIGHT_ARMS_SINGLE_SERIF = 5 '  Brazos rectos/Serif nico
Const PAN_STRAIGHT_ARMS_DOUBLE_SERIF = 6 '  Brazos rectos/Serif doble
Const PAN_BENT_ARMS_HORZ = 7  '  Brazos no rectos/Horizontal
Const PAN_BENT_ARMS_WEDGE = 8  '  Brazos no rectos/Cua
Const PAN_BENT_ARMS_VERT = 9  '  Brazos no rectos/Vertical
Const PAN_BENT_ARMS_SINGLE_SERIF = 10  '  Brazos no rectos/Serif nico
Const PAN_BENT_ARMS_DOUBLE_SERIF = 11  '  Brazos no rectos/Serif doble

Const PAN_LETT_NORMAL_CONTACT = 2  '  Normal/Contacto
Const PAN_LETT_NORMAL_WEIGHTED = 3  '  Normal/Compensada
Const PAN_LETT_NORMAL_BOXED = 4  '  Normal/Encajada
Const PAN_LETT_NORMAL_FLATTENED = 5  '  Normal/Aplanada
Const PAN_LETT_NORMAL_ROUNDED = 6  '  Normal/Redondeada
Const PAN_LETT_NORMAL_OFF_CENTER = 7  '  Normal/Descentrada
Const PAN_LETT_NORMAL_SQUARE = 8  '  Normal/Cuadrada
Const PAN_LETT_OBLIQUE_CONTACT = 9  '  Oblicua/Contacto
Const PAN_LETT_OBLIQUE_WEIGHTED = 10  '  Oblicua/Compensada
Const PAN_LETT_OBLIQUE_BOXED = 11  '  Oblicua/Encajada
Const PAN_LETT_OBLIQUE_FLATTENED = 12  '  Oblicua/Aplanada
Const PAN_LETT_OBLIQUE_ROUNDED = 13  '  Oblicua/Redondeada
Const PAN_LETT_OBLIQUE_OFF_CENTER = 14  '  Oblicua/Descentrada
Const PAN_LETT_OBLIQUE_SQUARE = 15  '  Oblicua/Cuadrada

Const PAN_MIDLINE_STANDARD_TRIMMED = 2  '  Estndar/Recortada
Const PAN_MIDLINE_STANDARD_POINTED = 3  '  Estndar/Acentuada
Const PAN_MIDLINE_STANDARD_SERIFED = 4  ' Estndar/Con serif
Const PAN_MIDLINE_HIGH_TRIMMED = 5  ' Mayscula/Recortada
Const PAN_MIDLINE_HIGH_POINTED = 6  ' Mayscula/Acentuada
Const PAN_MIDLINE_HIGH_SERIFED = 7  ' Mayscula/Con serif
Const PAN_MIDLINE_CONSTANT_TRIMMED = 8   '  Constante/Recortada
Const PAN_MIDLINE_CONSTANT_POINTED = 9   '  Constante/Acentuada
Const PAN_MIDLINE_CONSTANT_SERIFED = 10  '  Constante/Con serif
Const PAN_MIDLINE_LOW_TRIMMED = 11  ' Minscula/Recortada
Const PAN_MIDLINE_LOW_POINTED = 12  ' Minscula/Acentuada
Const PAN_MIDLINE_LOW_SERIFED = 13  ' Minscula/Con serif

Const PAN_XHEIGHT_CONSTANT_SMALL = 2  '  Constante/Pequea
Const PAN_XHEIGHT_CONSTANT_STD = 3    '  Constante/Estndar
Const PAN_XHEIGHT_CONSTANT_LARGE = 4  '  Constante/Grande
Const PAN_XHEIGHT_DUCKING_SMALL = 5   '  Sumergida/Pequea
Const PAN_XHEIGHT_DUCKING_STD = 6     '  Sumergida/Estndar
Const PAN_XHEIGHT_DUCKING_LARGE = 7   '  Sumergida/Grande

Const ELF_VENDOR_SIZE = 4

Type EXTLOGFONT
        elfLogFont  As LOGFONT
        elfFullName(LF_FULLFACESIZE) As Byte
        elfStyle(LF_FACESIZE) As Byte
        elfVersion As Long
        elfStyleSize As Long
        elfMatch As Long
        elfReserved As Long
        elfVendorId(ELF_VENDOR_SIZE) As Byte
        elfCulture As Long
        elfPanose As PANOSE
End Type

Const ELF_VERSION = 0
Const ELF_CULTURE_LATIN = 0

'  Mscaras de EnumFonts 
Const RASTER_FONTTYPE = &H1
Const DEVICE_FONTTYPE = &H2
Const TRUETYPE_FONTTYPE = &H4

' Indicadores de entrada de la paleta
Const PC_RESERVED = &H1          '  ndice de paleta que se usa para animacin
Const PC_EXPLICIT = &H2          '  ndice de paleta explcito para dispositivo
Const PC_NOCOLLAPSE = &H4        '  color no igual a la paleta del sistema

' Modos del fondo
Const TRANSPARENT = 1
Const OPAQUE = 2
Const BKMODE_LAST = 2

'  Modos de grficos
Const GM_COMPATIBLE = 1
Const GM_ADVANCED = 2
Const GM_LAST = 2

'  Tipos de puntos PolyDraw y GetPath
Const PT_CLOSEFIGURE = &H1
Const PT_LINETO = &H2
Const PT_BEZIERTO = &H4
Const PT_MOVETO = &H6

'  Modos de asignacin
Const MM_TEXT = 1
Const MM_LOMETRIC = 2
Const MM_HIMETRIC = 3
Const MM_LOENGLISH = 4
Const MM_HIENGLISH = 5
Const MM_TWIPS = 6
Const MM_ISOTROPIC = 7
Const MM_ANISOTROPIC = 8

'  Valores mnimo y mximo del modo de asignacin
Const MM_MIN = MM_TEXT
Const MM_MAX = MM_ANISOTROPIC
Const MM_MAX_FIXEDSCALE = MM_TWIPS

' Modos de coordenadas
Const ABSOLUTE = 1
Const RELATIVE = 2

' Objetos lgicos de Stock 
Const WHITE_BRUSH = 0
Const LTGRAY_BRUSH = 1
Const GRAY_BRUSH = 2
Const DKGRAY_BRUSH = 3
Const BLACK_BRUSH = 4
Const NULL_BRUSH = 5
Const HOLLOW_BRUSH = NULL_BRUSH
Const WHITE_PEN = 6
Const BLACK_PEN = 7
Const NULL_PEN = 8
Const OEM_FIXED_FONT = 10
Const ANSI_FIXED_FONT = 11
Const ANSI_VAR_FONT = 12
Const SYSTEM_FONT = 13
Const DEVICE_DEFAULT_FONT = 14
Const DEFAULT_PALETTE = 15
Const SYSTEM_FIXED_FONT = 16
Const STOCK_LAST = 16

Const CLR_INVALID = &HFFFF

' Estilos de pincel
Const BS_SOLID = 0
Const BS_NULL = 1
Const BS_HOLLOW = BS_NULL
Const BS_HATCHED = 2
Const BS_PATTERN = 3
Const BS_INDEXED = 4
Const BS_DIBPATTERN = 5
Const BS_DIBPATTERNPT = 6
Const BS_PATTERN8X8 = 7
Const BS_DIBPATTERN8X8 = 8

'  Estilos de rayas 
Const HS_HORIZONTAL = 0              '  -----
Const HS_VERTICAL = 1                '  |||||
Const HS_FDIAGONAL = 2               '  \\\\\
Const HS_BDIAGONAL = 3               '  /////
Const HS_CROSS = 4                   '  +++++
Const HS_DIAGCROSS = 5               '  xxxxx
Const HS_FDIAGONAL1 = 6
Const HS_BDIAGONAL1 = 7
Const HS_SOLID = 8
Const HS_DENSE1 = 9
Const HS_DENSE2 = 10
Const HS_DENSE3 = 11
Const HS_DENSE4 = 12
Const HS_DENSE5 = 13
Const HS_DENSE6 = 14
Const HS_DENSE7 = 15
Const HS_DENSE8 = 16
Const HS_NOSHADE = 17
Const HS_HALFTONE = 18
Const HS_SOLIDCLR = 19
Const HS_DITHEREDCLR = 20
Const HS_SOLIDTEXTCLR = 21
Const HS_DITHEREDTEXTCLR = 22
Const HS_SOLIDBKCLR = 23
Const HS_DITHEREDBKCLR = 24
Const HS_API_MAX = 25

'  Estilos de lpiz
Const PS_SOLID = 0
Const PS_DASH = 1                    '  -------
Const PS_DOT = 2                     '  .......
Const PS_DASHDOT = 3                 '  _._._._
Const PS_DASHDOTDOT = 4              '  _.._.._
Const PS_NULL = 5
Const PS_INSIDEFRAME = 6
Const PS_USERSTYLE = 7
Const PS_ALTERNATE = 8
Const PS_STYLE_MASK = &HF

Const PS_ENDCAP_ROUND = &H0
Const PS_ENDCAP_SQUARE = &H100
Const PS_ENDCAP_FLAT = &H200
Const PS_ENDCAP_MASK = &HF00

Const PS_JOIN_ROUND = &H0
Const PS_JOIN_BEVEL = &H1000
Const PS_JOIN_MITER = &H2000
Const PS_JOIN_MASK = &HF000

Const PS_COSMETIC = &H0
Const PS_GEOMETRIC = &H10000
Const PS_TYPE_MASK = &HF0000

Const AD_COUNTERCLOCKWISE = 1
Const AD_CLOCKWISE = 2

'  Parmetros de dispositivos para GetDeviceCaps()
Const DRIVERVERSION = 0      '  Versin del controlador del dispositivo
Const TECHNOLOGY = 2         '  Clasificacin del dispositivo
Const HORZSIZE = 4           '  Tamao horizontal en milmetros
Const VERTSIZE = 6           '  Tamao vertical en milmetros
Const HORZRES = 8            '  Ancho horizontal en pxeles
Const VERTRES = 10           '  Ancho vertical en pxeles
Const BITSPIXEL = 12         '  Nmero de bits por pxel
Const PLANES = 14            '  Nmero de planos
Const NUMBRUSHES = 16        '  Nmero de pinceles que tiene el dispositivo
Const NUMPENS = 18           '  Nmero de lpices que tiene el dispositivo
Const NUMMARKERS = 20        '  Nmero de marcadores que tiene el dispositivo
Const NUMFONTS = 22          '  Nmero de fuentes que tiene el dispositivo
Const NUMCOLORS = 24         '  Nmero de colores que admite el dispositivo
Const PDEVICESIZE = 26       '  Tamao requerido para el descriptor del dispositivo
Const CURVECAPS = 28         '  Capacidad de trazar curvas
Const LINECAPS = 30          '  Capacidad de trazar lneas
Const POLYGONALCAPS = 32     '  Capacidad de trazar polgonos
Const TEXTCAPS = 34          '  Capacidad de escribir texto
Const CLIPCAPS = 36          '  Capacidad de recorte
Const RASTERCAPS = 38        '  Capacidad de barrido de bits
Const ASPECTX = 40           '  Longitud del eje X
Const ASPECTY = 42           '  Longitud del eje Y
Const ASPECTXY = 44          '  Longitud de la hipotenusa

Const LOGPIXELSX = 88        '  Pxeles/pulgadas lgicas en X
Const LOGPIXELSY = 90        '  Pxeles/pulgadas lgicas en Y

Const SIZEPALETTE = 104      '  Nmero de entradas de la paleta fsica
Const NUMRESERVED = 106      '  Nmero de entradas reservadas en la paleta
Const COLORRES = 108         '  Resolucin de color real

'  DeviceCaps relacionadas con la impresin. Sustituyen a los Escapes apropiados
Const PHYSICALWIDTH = 110    '  Ancho fsico en unidades del dispositivo
Const PHYSICALHEIGHT = 111   '  Alto fsico en unidades del dispositivo
Const PHYSICALOFFSETX = 112  '  Margen x del rea fsica imprimible
Const PHYSICALOFFSETY = 113  '  Margen y del rea fsica imprimible
Const SCALINGFACTORX = 114   '  Factor de escala x
Const SCALINGFACTORY = 115   '  Factor de escala y

'  Mscaras de capacidad del dispositivo:

'  Tecnologas de dispositivos
Const DT_PLOTTER = 0             '  Trazador grfico de vectores
Const DT_RASDISPLAY = 1          '  Pantalla de barrido
Const DT_RASPRINTER = 2          '  Impresora de barrido
Const DT_RASCAMERA = 3           '  Cmara de barrido
Const DT_CHARSTREAM = 4          '  Flujo de caracteres, PLP
Const DT_METAFILE = 5            '  Metarchivo, VDM
Const DT_DISPFILE = 6            '  Archivo de pantalla

' Capacidad de trazar curvas
Const CC_NONE = 0                '  No dibuja curvas
Const CC_CIRCLES = 1             '  Puede hacer crculos
Const CC_PIE = 2                 '  Puede hacer cuas de grficos circulares
Const CC_CHORD = 4               '  Puede hacer arcos de cuerda
Const CC_ELLIPSES = 8            '  Puede hacer elipses
Const CC_WIDE = 16               '  Puede hacer lneas anchas
Const CC_STYLED = 32             '  Puede hacer lneas con estilo
Const CC_WIDESTYLED = 64         '  Puede hacer lneas anchas con estilo
Const CC_INTERIORS = 128         '  Puede hacer interiores
Const CC_ROUNDRECT = 256 '

' Capacidad de trazar lneas
Const LC_NONE = 0                '  No dibuja lneas
Const LC_POLYLINE = 2            '  Puede hacer lneas mltiples
Const LC_MARKER = 4              '  Puede hacer marcadores
Const LC_POLYMARKER = 8          '  Puede hacer marcadores mltiples
Const LC_WIDE = 16               '  Puede hacer lneas anchas
Const LC_STYLED = 32             '  Puede hacer lneas con estilo
Const LC_WIDESTYLED = 64         '  Puede hacer lneas anchas con estilo
Const LC_INTERIORS = 128         '  Puede hacer interiores

' Capacidad de trazar polgonos
Const PC_NONE = 0                '  No dibuja polgonos
Const PC_POLYGON = 1             '  Puede hacer polgonos
Const PC_RECTANGLE = 2           '  Puede hacer rectngulos
Const PC_WINDPOLYGON = 4         '  Puede hacer polgonos sinuosos
Const PC_TRAPEZOID = 4           '  Puede hacer trapezoides
Const PC_SCANLINE = 8            '  Puede hacer lneas de exploracin
Const PC_WIDE = 16               '  Puede hacer bordes anchos
Const PC_STYLED = 32             '  Puede hacer bordes con estilo
Const PC_WIDESTYLED = 64         '  Puede hacer bordes anchos con estilo
Const PC_INTERIORS = 128         '  Puede hacer interiores

' Capacidad de trazar polgonos
Const CP_NONE = 0                '  No se puede recortar lo dibujado
Const CP_RECTANGLE = 1           '  Lo dibujado se puede recortar en rectngulos
Const CP_REGION = 2              '

'  Capacidad de texto
Const TC_OP_CHARACTER = &H1      '  Puede hacer precisin de salida del    CARCTER
Const TC_OP_STROKE = &H2         '  Puede hacer precisin de salida del     TRAZO
Const TC_CP_STROKE = &H4         '  Puede hacer precisin de recorte del    TRAZO
Const TC_CR_90 = &H8             '  Puede hacer capacidad de rotacin de caracteres     90
Const TC_CR_ANY = &H10           '  Puede hacer CUALQUIER capacidad de rotacin de caracteres
Const TC_SF_X_YINDEP = &H20      '  Puede hacer libertad de escala INDEPENDIENTE DE X_Y
Const TC_SA_DOUBLE = &H40        '  Puede hacer la capacidad de escala   DOBLE
Const TC_SA_INTEGER = &H80       '  Puede hacer la capacidad de escala    ENTERO
Const TC_SA_CONTIN = &H100       '  Puede hacer la capacidad de escala   CONTINUA
Const TC_EA_DOUBLE = &H200       '  Puede hacer la capacidad de negrita   DOBLE
Const TC_IA_ABLE = &H400         '  Puede hacer la capacidad de tamao de cursiva    ACTIVADA
Const TC_UA_ABLE = &H800         '  Puede hacer la capacidad de subrayado    ACTIVADA
Const TC_SO_ABLE = &H1000        '  Puede hacer la capacidad de trazo doble    ACTIVADA
Const TC_RA_ABLE = &H2000        '  Puede hacer la capacidad de fuente raster    ACTIVADA
Const TC_VA_ABLE = &H4000        '  Puede hacer la capacidad de fuente vector     ACTIVADA
Const TC_RESERVED = &H8000
Const TC_SCROLLBLT = &H10000     '  Desplaza el texto con barrido

' Capacidad de barrido de bits
Const RC_NONE = 0
Const RC_BITBLT = 1              '  Puede hacer el barrido estndar.
Const RC_BANDING = 2             '  El dispositivo requiere soporte de banda
Const RC_SCALING = 4             '  El dispositivo requiere soporte de escala
Const RC_BITMAP64 = 8            '  El dispositivo admite mapas de bits >64K
Const RC_GDI20_OUTPUT = &H10     '  tiene llamadas de salida 2.0
Const RC_GDI20_STATE = &H20
Const RC_SAVEBITMAP = &H40
Const RC_DI_BITMAP = &H80 H80    '  admite DIB en memoria
Const RC_PALETTE = &H100         '  admite una paleta
Const RC_DIBTODEV = &H200 H200   '  admite DIB en el dispositivo
Const RC_BIGFONT = &H400         '  admite fuentes >64K
Const RC_STRETCHBLT = &H800      '  admite barrido StretchBlt
Const RC_FLOODFILL = &H1000      '  admite relleno FloodFill
Const RC_STRETCHDIB = &H2000     '  admite DIB Stretch
Const RC_OP_DX_OUTPUT = &H4000
Const RC_DEVBITS = &H8000

' Identificadores de la tabla de color de DIB
Const DIB_RGB_COLORS = 0   '  tabla de color en RGB (rojo-verde-azul)
Const DIB_PAL_COLORS = 1   '  tabla de color en los ndices de la paleta
Const DIB_PAL_INDICES = 2  '  No hay ndices de la tabla de color en la paleta de pantalla
Const DIB_PAL_PHYSINDICES = 2 '  No hay ndices de la tabla de color en la paleta de pantalla
Const DIB_PAL_LOGINDICES = 4  '  No hay ndices de la tabla de color en la paleta DC

' constantes para Get/SetSystemPaletteUse()
Const SYSPAL_ERROR = 0
Const SYSPAL_STATIC = 1
Const SYSPAL_NOSTATIC = 2

' constantes para CreateDIBitmap
Const CBM_CREATEDIB = &H2      '  crea mapa de bits DIB
Const CBM_INIT = &H4           '  inicializa mapa de bits

' Indicadores de estilo de ExtFloodFill
Const FLOODFILLBORDER = 0
Const FLOODFILLSURFACE = 1

'  Tamao de las cadenas de nombre de dispositivo
Const CCHDEVICENAME = 32

'  Tamao de las cadenas de nombre de formulario
Const CCHFORMNAME = 32

Type DEVMODE
        dmDeviceName As String * CCHDEVICENAME
        dmSpecVersion As Integer
        dmDriverVersion As Integer
        dmSize As Integer
        dmDriverExtra As Integer
        dmFields As Long
        dmOrientation As Integer
        dmPaperSize As Integer
        dmPaperLength As Integer
        dmPaperWidth As Integer
        dmScale As Integer
        dmCopies As Integer
        dmDefaultSource As Integer
        dmPrintQuality As Integer
        dmColor As Integer
        dmDuplex As Integer
        dmYResolution As Integer
        dmTTOption As Integer
        dmCollate As Integer
        dmFormName As String * CCHFORMNAME
        dmUnusedPadding As Integer
        dmBitsPerPel As Long
        dmPelsWidth As Long
        dmPelsHeight As Long
        dmDisplayFlags As Long
        dmDisplayFrequency As Long
End Type

' Versin actual de especificacin
Const DM_SPECVERSION = &H320

' Bits de seleccin de campos
Const DM_ORIENTATION = &H1&
Const DM_PAPERSIZE = &H2&
Const DM_PAPERLENGTH = &H4&
Const DM_PAPERWIDTH = &H8&
Const DM_SCALE = &H10&
Const DM_COPIES = &H100&
Const DM_DEFAULTSOURCE = &H200&
Const DM_PRINTQUALITY = &H400&
Const DM_COLOR = &H800&
Const DM_DUPLEX = &H1000&
Const DM_YRESOLUTION = &H2000&
Const DM_TTOPTION = &H4000&
Const DM_COLLATE As Long = &H8000
Const DM_FORMNAME As Long = &H10000

'  Selecciones de orientacin
Const DMORIENT_PORTRAIT = 1
Const DMORIENT_LANDSCAPE = 2

'  Selecciones de papel
Const DMPAPER_LETTER = 1
Const DMPAPER_FIRST = DMPAPER_LETTER     '  Carta 8 1/2 x 11 pulg.
Const DMPAPER_LETTERSMALL = 2            '  Carta pequea 8 1/2 x 11 pulg.
Const DMPAPER_TABLOID = 3                '  Tabloide 11 x 17 pulg.
Const DMPAPER_LEDGER = 4                 '  Doble carta 17 x 11 pulg.
Const DMPAPER_LEGAL = 5                  '  Oficio 8 1/2 x 14 pulg.
Const DMPAPER_STATEMENT = 6              '  Estamento 5 1/2 x 8 1/2 pulg.
Const DMPAPER_EXECUTIVE = 7              '  Ejecutivo 7 1/4 x 10 1/2 pulg.
Const DMPAPER_A3 = 8                     '  A3 297 x 420 mm
Const DMPAPER_A4 = 9                     '  A4 210 x 297 mm
Const DMPAPER_A4SMALL = 10               '  A4 Pequeo 210 x 297 mm
Const DMPAPER_A5 = 11                    '  A5 148 x 210 mm
Const DMPAPER_B4 = 12                    '  B4 250 x 354
Const DMPAPER_B5 = 13                    '  B5 182 x 257 mm
Const DMPAPER_FOLIO = 14                 '  Folio 8 1/2 x 13 pulg.
Const DMPAPER_QUARTO = 15                '  Cuarto 215 x 275 mm
Const DMPAPER_10X14 = 16                 '  10x14 pulg.
Const DMPAPER_11X17 = 17                 '  11x17 pulg.
Const DMPAPER_NOTE = 18                  '  Nota 8 1/2 x 11 pulg.
Const DMPAPER_ENV_9 = 19                 '  Sobre N 9 3 7/8 x 8 7/8
Const DMPAPER_ENV_10 = 20                '  Sobre N 10 4 1/8 x 9 1/2
Const DMPAPER_ENV_11 = 21                '  Sobre N 11 4 1/2 x 10 3/8
Const DMPAPER_ENV_12 = 22                '  Sobre N 12 4 \276 x 11
Const DMPAPER_ENV_14 = 23                '  Sobre N 14 5 x 11 1/2
Const DMPAPER_CSHEET = 24                '  Hoja tamao C
Const DMPAPER_DSHEET = 25                '  Hoja tamao D
Const DMPAPER_ESHEET = 26                '  Hoja tamao E
Const DMPAPER_ENV_DL = 27                '  Sobre DL 110 x 220mm
Const DMPAPER_ENV_C5 = 28                '  Sobre C5 162 x 229 mm
Const DMPAPER_ENV_C3 = 29                '  Sobre C3  324 x 458 mm
Const DMPAPER_ENV_C4 = 30                '  Sobre C4  229 x 324 mm
Const DMPAPER_ENV_C6 = 31                '  Sobre C6  114 x 162 mm
Const DMPAPER_ENV_C65 = 32               '  Sobre C65 114 x 229 mm
Const DMPAPER_ENV_B4 = 33                '  Sobre B4  250 x 353 mm
Const DMPAPER_ENV_B5 = 34                '  Sobre B5  176 x 250 mm
Const DMPAPER_ENV_B6 = 35                '  Sobre B6  176 x 125 mm
Const DMPAPER_ENV_ITALY = 36             '  Sobre 110 x 230 mm
Const DMPAPER_ENV_MONARCH = 37           '  Sobre monarca 3.875 x 7.5 pulg.
Const DMPAPER_ENV_PERSONAL = 38          '  Sobre 6 3/4  3 5/8 x 6 1/2 pulg.
Const DMPAPER_FANFOLD_US = 39            '  Continuo USA estndar 14 7/8 x 11 pulg.
Const DMPAPER_FANFOLD_STD_GERMAN = 40    '  Continuo alemn estndar 8 1/2 x 12 pulg.
Const DMPAPER_FANFOLD_LGL_GERMAN = 41    '  Continuo alemn oficio 8 1/2 x 13 pulg.

Const DMPAPER_LAST = DMPAPER_FANFOLD_LGL_GERMAN

Const DMPAPER_USER = 256

'  Selecciones de bandeja
Const DMBIN_UPPER = 1
Const DMBIN_FIRST = DMBIN_UPPER

Const DMBIN_ONLYONE = 1
Const DMBIN_LOWER = 2
Const DMBIN_MIDDLE = 3
Const DMBIN_MANUAL = 4
Const DMBIN_ENVELOPE = 5
Const DMBIN_ENVMANUAL = 6
Const DMBIN_AUTO = 7
Const DMBIN_TRACTOR = 8
Const DMBIN_SMALLFMT = 9
Const DMBIN_LARGEFMT = 10
Const DMBIN_LARGECAPACITY = 11
Const DMBIN_CASSETTE = 14
Const DMBIN_LAST = DMBIN_CASSETTE

Const DMBIN_USER = 256               '  las bandejas especficas del dispositivo comienzan aqu

'  Calidades de impresin
Const DMRES_DRAFT = (-1)
Const DMRES_LOW = (-2)
Const DMRES_MEDIUM = (-3)
Const DMRES_HIGH = (-4)

'  Activar/desactivar el color para impresoras de color
Const DMCOLOR_MONOCHROME = 1
Const DMCOLOR_COLOR = 2

'  Activacin de impresin a doble cara
Const DMDUP_SIMPLEX = 1
Const DMDUP_VERTICAL = 2
Const DMDUP_HORIZONTAL = 3

'  Opciones TrueType 
Const DMTT_BITMAP = 1            '  imprime las fuentes TT como grficos
Const DMTT_DOWNLOAD = 2          '  descarga las fuentes TT como fuentes transferibles
Const DMTT_SUBDEV = 3            '  sustituye las fuentes del dispositivo por fuentes TT

'  Selecciones de intercalado de copias
Const DMCOLLATE_FALSE = 0
Const DMCOLLATE_TRUE = 1

'  Indicadores dmDisplayFlags de DEVMODE

Const DM_GRAYSCALE = &H1
Const DM_INTERLACED = &H2

'  GetRegionData/ExtCreateRegion

Const RDH_RECTANGLES = 1

Type RGNDATAHEADER
        dwSize As Long
        iType As Long
        nCount As Long
        nRgnSize As Long
        rcBound As Rect
End Type

Type RGNDATA
        rdh As RGNDATAHEADER
        Buffer As Byte
End Type

Type ABC
        abcA As Long
        abcB As Long
        abcC As Long
End Type

Type ABCFLOAT
        abcfA As Double
        abcfB As Double
        abcfC As Double
End Type

Type OUTLINETEXTMETRIC
        otmSize As Long
        otmTextMetrics As TEXTMETRIC
        otmFiller As Byte
        otmPanoseNumber As PANOSE
        otmfsSelection As Long
        otmfsType As Long
        otmsCharSlopeRise As Long
        otmsCharSlopeRun As Long
        otmItalicAngle As Long
        otmEMSquare As Long
        otmAscent As Long
        otmDescent As Long
        otmLineGap As Long
        otmsCapEmHeight As Long
        otmsXHeight As Long
        otmrcFontBox As Rect
        otmMacAscent As Long
        otmMacDescent As Long
        otmMacLineGap As Long
        otmusMinimumPPEM As Long
        otmptSubscriptSize As POINTAPI
        otmptSubscriptOffset As POINTAPI
        otmptSuperscriptSize As POINTAPI
        otmptSuperscriptOffset As POINTAPI
        otmsStrikeoutSize As Long
        otmsStrikeoutPosition As Long
        otmsUnderscorePosition As Long
        otmsUnderscoreSize As Long
        otmpFamilyName As String
        otmpFaceName As String
        otmpStyleName As String
        otmpFullName As String
End Type

Type POLYTEXT
        x As Long
        y As Long
        n As Long
        lpStr As String
        uiFlags As Long
        rcl As Rect
        pdx As Long
End Type

Type FIXED
        fract As Integer
        Value As Integer
End Type

Type MAT2
        eM11 As FIXED
        eM12 As FIXED
        eM21 As FIXED
        eM22 As FIXED
End Type

Type GLYPHMETRICS
        gmBlackBoxX As Long
        gmBlackBoxY As Long
        gmptGlyphOrigin As POINTAPI
        gmCellIncX As Integer
        gmCellIncY As Integer
End Type


' Constantes de GetGlyphOutline 
Const GGO_METRICS = 0
Const GGO_BITMAP = 1
Const GGO_NATIVE = 2

Const TT_POLYGON_TYPE = 24

Const TT_PRIM_LINE = 1
Const TT_PRIM_QSPLINE = 2

Type POINTFX
        x As FIXED
        y As FIXED
End Type

Type TTPOLYCURVE
        wType As Integer
        cpfx As Integer
        apfx As POINTFX
End Type

Type TTPOLYGONHEADER
        cb As Long
        dwType As Long
        pfxStart As POINTFX
End Type

Type RASTERIZER_STATUS
        nSize As Integer
        wFlags As Integer
        nLanguageID As Integer
End Type

' Bits definidos en los indicadores wFlags de RASTERIZER_STATUS
Const TT_AVAILABLE = &H1
Const TT_ENABLED = &H2

Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Long

Declare Function AnimatePalette Lib "gdi32" Alias "AnimatePaletteA" (ByVal hPalette As Long, ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteColors As PALETTEENTRY) As Long
Declare Function Arc Lib "gdi32" Alias "Arc" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Declare Function CancelDC Lib "gdi32" Alias "CancelDC" (ByVal hdc As Long) As Long
Declare Function Chord Lib "gdi32" Alias "Chord" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Declare Function CloseMetaFile Lib "gdi32" Alias "CloseMetaFile" (ByVal hMF As Long) As Long
Declare Function CombineRgn Lib "gdi32" Alias "CombineRgn" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Declare Function CopyMetaFile Lib "gdi32" Alias "CopyMetaFileA" (ByVal hMF As Long, ByVal lpFileName As String) As Long

Declare Function CreateBitmap Lib "gdi32" Alias "CreateBitmap" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long
Declare Function CreateBitmapIndirect Lib "gdi32" Alias "CreateBitmapIndirect" (lpBitmap As BITMAP) As Long
Declare Function CreateBrushIndirect Lib "gdi32" Alias "CreateBrushIndirect" (lpLogBrush As LOGBRUSH) As Long
Declare Function CreateCompatibleBitmap Lib "gdi32" Alias "CreateCompatibleBitmap" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Declare Function CreateDiscardableBitmap Lib "gdi32" Alias "CreateDiscardableBitmap" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long

Declare Function CreateCompatibleDC Lib "gdi32" Alias "CreateCompatibleDC" (ByVal hdc As Long) As Long
Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As DEVMODE) As Long

Declare Function CreateDIBitmap Lib "gdi32" Alias "CreateDIBitmap" (ByVal hdc As Long, lpInfoHeader As BITMAPINFOHEADER, ByVal dwUsage As Long, lpInitBits As Any, lpInitInfo As BITMAPINFO, ByVal wUsage As Long) As Long
Declare Function CreateDIBPatternBrush Lib "gdi32" Alias "CreateDIBPatternBrush" (ByVal hPackedDIB As Long, ByVal wUsage As Long) As Long
Declare Function CreateDIBPatternBrushPt Lib "gdi32" Alias "CreateDIBPatternBrushPt" (lpPackedDIB As Any, ByVal iUsage As Long) As Long
Declare Function CreateEllipticRgnIndirect Lib "gdi32" Alias "CreateEllipticRgnIndirect" (lpRect As Rect) As Long
Declare Function CreateEllipticRgn Lib "gdi32" Alias "CreateEllipticRgn" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal H As Long, ByVal W As Long, ByVal E As Long, ByVal O As Long, ByVal W As Long, ByVal I As Long, ByVal u As Long, ByVal S As Long, ByVal C As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal F As String) As Long

Declare Function CreateHatchBrush Lib "gdi32" Alias "CreateHatchBrush" (ByVal nIndex As Long, ByVal crColor As Long) As Long
Declare Function CreateIC Lib "gdi32" Alias "CreateICA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As DEVMODE) As Long

Declare Function CreateMetaFile Lib "gdi32" Alias "CreateMetaFileA" (ByVal lpString As String) As Long

Declare Function CreatePalette Lib "gdi32" Alias "CreatePalette" (lpLogPalette As LOGPALETTE) As Long
Declare Function CreatePen Lib "gdi32" Alias "CreatePen" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Declare Function CreatePenIndirect Lib "gdi32" Alias "CreatePenIndirect" (lpLogPen As LOGPEN) As Long
Declare Function CreateRectRgn Lib "gdi32" Alias "CreateRectRgn" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function CreateRectRgnIndirect Lib "gdi32" Alias "CreateRectRgnIndirect" (lpRect As RECT) As Long
Declare Function CreatePolyPolygonRgn Lib "gdi32" Alias "CreatePolyPolygonRgn" (lpPoint As POINTAPI, lpPolyCounts As Long, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Declare Function CreatePatternBrush Lib "gdi32" Alias "CreatePatternBrush" (ByVal hBitmap As Long) As Long
Declare Function CreateRoundRectRgn Lib "gdi32" Alias "CreateRoundRectRgn" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
Declare Function CreateScalableFontResource Lib "gdi32" Alias "CreateScalableFontResourceA" (ByVal fHidden As Long, ByVal lpszResourceFile As String, ByVal lpszFontFile As String, ByVal lpszCurrentPath As String) As Long
Declare Function CreateSolidBrush Lib "gdi32" Alias "CreateSolidBrush" (ByVal crColor As Long) As Long

Declare Function DeleteDC Lib "gdi32" Alias "DeleteDC" (ByVal hdc As Long) As Long
Declare Function DeleteObject Lib "gdi32" Alias "DeleteObject" (ByVal hObject As Long) As Long
Declare Function DeleteMetaFile Lib "gdi32" Alias "DeleteMetaFile" (ByVal hMF As Long) As Long

'  Seleccin de modo para la funcin de modo del dispositivo
Const DM_UPDATE = 1
Const DM_COPY = 2
Const DM_PROMPT = 4
Const DM_MODIFY = 8

Const DM_IN_BUFFER = DM_MODIFY
Const DM_IN_PROMPT = DM_PROMPT
Const DM_OUT_BUFFER = DM_COPY
Const DM_OUT_DEFAULT = DM_UPDATE

'  ndices de capacidades del dispositivo
Const DC_FIELDS = 1
Const DC_PAPERS = 2
Const DC_PAPERSIZE = 3
Const DC_MINEXTENT = 4
Const DC_MAXEXTENT = 5
Const DC_BINS = 6
Const DC_DUPLEX = 7
Const DC_SIZE = 8
Const DC_EXTRA = 9
Const DC_VERSION = 10
Const DC_DRIVER = 11
Const DC_BINNAMES = 12
Const DC_ENUMRESOLUTIONS = 13
Const DC_FILEDEPENDENCIES = 14
Const DC_TRUETYPE = 15
Const DC_PAPERNAMES = 16
Const DC_ORIENTATION = 17
Const DC_COPIES = 18

'  Campos de bits del valor de retorno (DWORD) para DC_TRUETYPE
Const DCTT_BITMAP = &H1&
Const DCTT_DOWNLOAD = &H2&
Const DCTT_SUBDEV = &H4&

Declare Function DeviceCapabilities Lib "winspool.drv" Alias "DeviceCapabilitiesA" (ByVal lpDeviceName As String, ByVal lpPort As String, ByVal iIndex As Long, ByVal lpOutput As String, lpDevMode As DEVMODE) As Long

Declare Function Ellipse Lib "gdi32" Alias "Ellipse" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Declare Function EqualRgn Lib "gdi32" Alias "EqualRgn" (ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long) As Long
Declare Function Escape Lib "gdi32" Alias "Escape" (ByVal hdc As Long, ByVal nEscape As Long, ByVal nCount As Long, ByVal lpInData As String, lpOutData As Any) As Long
Declare Function ExtEscape Lib "gdi32" Alias "ExtEscape" (ByVal hdc As Long, ByVal nEscape As Long, ByVal cbInput As Long, ByVal lpszInData As String, ByVal cbOutput As Long, ByVal lpszOutData As String) As Long
Declare Function DrawEscape Lib "gdi32" Alias "DrawEscape" (ByVal hdc As Long, ByVal nEscape As Long, ByVal cbInput As Long, ByVal lpszInData As String) As Long
Declare Function ExcludeClipRect Lib "gdi32" Alias "ExcludeClipRect" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function ExtCreateRegion Lib "gdi32" Alias "ExtCreateRegion" (lpXform As xform, ByVal nCount As Long, lpRgnData As RGNDATA) As Long
Declare Function ExtFloodFill Lib "gdi32" Alias "ExtFloodFill" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long, ByVal wFillType As Long) As Long
Declare Function FillRgn Lib "gdi32" Alias "FillRgn" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long
Declare Function FrameRgn Lib "gdi32" Alias "FrameRgn" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Declare Function FloodFill Lib "gdi32" Alias "FloodFill" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Declare Function GetROP2 Lib "gdi32" Alias "GetROP2" (ByVal hdc As Long) As Long
Declare Function GetAspectRatioFilterEx Lib "gdi32" Alias "GetAspectRatioFilterEx" (ByVal hdc As Long, lpAspectRatio As SIZE) As Long
Declare Function GetBkColor Lib "gdi32" Alias "GetBkColor" (ByVal hdc As Long) As Long
Declare Function GetBkMode Lib "gdi32" Alias "GetBkMode" (ByVal hdc As Long) As Long
Declare Function GetBitmapBits Lib "gdi32" Alias "GetBitmapBits" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Declare Function GetBitmapDimensionEx Lib "gdi32" Alias "GetBitmapDimensionEx" (ByVal hBitmap As Long, lpDimension As SIZE) As Long
Declare Function GetBoundsRect Lib "gdi32" Alias "GetBoundsRect" (ByVal hdc As Long, lprcBounds As RECT, ByVal flags As Long) As Long

Declare Function GetCharWidth Lib "gdi32" Alias "GetCharWidthA" (ByVal hdc As Long, ByVal wFirstChar As Long, ByVal wLastChar As Long, lpBuffer As Long) As Long

Declare Function GetCharWidth32 Lib "gdi32" Alias "GetCharWidth32A" (ByVal hdc As Long, ByVal iFirstChar As Long, ByVal iLastChar As Long, lpBuffer As Long) As Long
Declare Function GetCharWidthFloat Lib "gdi32" Alias "GetCharWidthFloatA" (ByVal hdc As Long, ByVal iFirstChar As Long, ByVal iLastChar As Long, pxBuffer As Double) As Long

Declare Function GetCharABCWidths Lib "gdi32" Alias "GetCharABCWidthsA" (ByVal hdc As Long, ByVal uFirstChar As Long, ByVal uLastChar As Long, lpabc As ABC) As Long
Declare Function GetCharABCWidthsFloat Lib "gdi32" Alias "GetCharABCWidthsFloatA" (ByVal hdc As Long, ByVal iFirstChar As Long, ByVal iLastChar As Long, lpABCF As ABCFLOAT) As Long

Declare Function GetClipBox Lib "gdi32" Alias "GetClipBox" (ByVal hdc As Long, lpRect As RECT) As Long
Declare Function GetClipRgn Lib "gdi32" Alias "GetClipRgn" (ByVal hdc As Long, ByVal hRgn As Long) As Long
Declare Function GetMetaRgn Lib "gdi32" Alias "GetMetaRgn" (ByVal hdc As Long, ByVal hRgn As Long) As Long
Declare Function GetCurrentObject Lib "gdi32" Alias "GetCurrentObject" (ByVal hdc As Long, ByVal uObjectType As Long) As Long
Declare Function GetCurrentPositionEx Lib "gdi32" Alias "GetCurrentPositionEx" (ByVal hdc As Long, lpPoint As POINTAPI) As Long
Declare Function GetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Declare Function GetDIBits Lib "gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Declare Function GetFontData Lib "gdi32" Alias "GetFontDataA" (ByVal hdc As Long, ByVal dwTable As Long, ByVal dwOffset As Long, lpvBuffer As Any, ByVal cbData As Long) As Long
Declare Function GetGlyphOutline Lib "gdi32" Alias "GetGlyphOutlineA" (ByVal hdc As Long, ByVal uChar As Long, ByVal fuFormat As Long, lpgm As GLYPHMETRICS, ByVal cbBuffer As Long, lpBuffer As Any, lpmat2 As MAT2) As Long
Declare Function GetGraphicsMode Lib "gdi32" Alias "GetGraphicsMode" (ByVal hdc As Long) As Long
Declare Function GetMapMode Lib "gdi32" Alias "GetMapMode" (ByVal hdc As Long) As Long
Declare Function GetMetaFileBitsEx Lib "gdi32" Alias "GetMetaFileBitsEx" (ByVal hMF As Long, ByVal nSize As Long, lpvData As Any) As Long
Declare Function GetMetaFile Lib "gdi32" Alias "GetMetaFileA" (ByVal lpFileName As String) As Long
Declare Function GetNearestColor Lib "gdi32" Alias "GetNearestColor" (ByVal hdc As Long, ByVal crColor As Long) As Long
Declare Function GetNearestPaletteIndex Lib "gdi32" Alias "GetNearestPaletteIndex" (ByVal hPalette As Long, ByVal crColor As Long) As Long
Declare Function GetObjectType Lib "gdi32" Alias "GetObjectType" (ByVal hgdiobj As Long) As Long

Declare Function GetOutlineTextMetrics Lib "gdi32" Alias "GetOutlineTextMetricsA" (ByVal hdc As Long, ByVal cbData As Long, lpotm As OUTLINETEXTMETRIC) As Long

Declare Function GetPaletteEntries Lib "gdi32" Alias "GetPaletteEntries" (ByVal hPalette As Long, ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries As PALETTEENTRY) As Long
Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Declare Function GetPolyFillMode Lib "gdi32" Alias "GetPolyFillMode" (ByVal hdc As Long) As Long
Declare Function GetRasterizerCaps Lib "gdi32" Alias "GetRasterizerCaps" (lpraststat As RASTERIZER_STATUS, ByVal cb As Long) As Long
Declare Function GetRegionData Lib "gdi32" Alias "GetRegionDataA" (ByVal hRgn As Long, ByVal dwCount As Long, lpRgnData As RgnData) As Long
Declare Function GetRgnBox Lib "gdi32" Alias "GetRgnBox" (ByVal hRgn As Long, lpRect As RECT) As Long
Declare Function GetStockObject Lib "gdi32" Alias "GetStockObject" (ByVal nIndex As Long) As Long
Declare Function GetStretchBltMode Lib "gdi32" Alias "GetStretchBltMode" (ByVal hdc As Long) As Long
Declare Function GetSystemPaletteEntries Lib "gdi32" Alias "GetSystemPaletteEntries" (ByVal hdc As Long, ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries As PALETTEENTRY) As Long
Declare Function GetSystemPaletteUse Lib "gdi32" Alias "GetSystemPaletteUse" (ByVal hdc As Long) As Long
Declare Function GetTextCharacterExtra Lib "gdi32" (ByVal hdc As Long) As Long
Declare Function GetTextAlign Lib "gdi32" Alias "GetTextAlign" (ByVal hdc As Long) As Long
Declare Function GetTextColor Lib "gdi32" Alias "GetTextColor" (ByVal hdc As Long) As Long

Declare Function GetTextExtentPoint Lib "gdi32" Alias "GetTextExtentPointA" (ByVal hdc As Long, ByVal lpszString As String, ByVal cbString As Long, lpSize As SIZE) As Long
Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As SIZE) As Long
Declare Function GetTextExtentExPoint Lib "gdi32" Alias "GetTextExtentExPointA" (ByVal hdc As Long, ByVal lpszStr As String, ByVal cchString As Long, ByVal nMaxExtent As Long, lpnFit As Long, alpDx As Long, lpSize As SIZE) As Long

Declare Function GetViewportExtEx Lib "gdi32" Alias "GetViewportExtEx" (ByVal hdc As Long, lpSize As SIZE) As Long
Declare Function GetViewportOrgEx Lib "gdi32" Alias "GetViewportOrgEx" (ByVal hdc As Long, lpPoint As POINTAPI) As Long
Declare Function GetWindowExtEx Lib "gdi32" Alias "GetWindowExtEx" (ByVal hdc As Long, lpSize As SIZE) As Long
Declare Function GetWindowOrgEx Lib "gdi32" Alias "GetWindowOrgEx" (ByVal hdc As Long, lpPoint As POINTAPI) As Long

Declare Function IntersectClipRect Lib "gdi32" Alias "IntersectClipRect" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function InvertRgn Lib "gdi32" Alias "InvertRgn" (ByVal hdc As Long, ByVal hRgn As Long) As Long
Declare Function LineTo Lib "gdi32" Alias "LineTo" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Declare Function MaskBlt Lib "gdi32" Alias "MaskBlt" (ByVal hdcDest As Long, ByVal nXDest As Long, ByVal nYDest As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hdcSrc As Long, ByVal nXSrc As Long, ByVal nYSrc As Long, ByVal hbmMask As Long, ByVal xMask As Long, ByVal yMask As Long, ByVal dwRop As Long) As Long
Declare Function PlgBlt Lib "gdi32" Alias "PlgBlt" (ByVal hdcDest As Long, lpPoint As POINTAPI, ByVal hdcSrc As Long, ByVal nXSrc As Long, ByVal nYSrc As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hbmMask As Long, ByVal xMask As Long, ByVal yMask As Long) As Long

Declare Function OffsetClipRgn Lib "gdi32" Alias "OffsetClipRgn" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Declare Function OffsetRgn Lib "gdi32" Alias "OffsetRgn" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long
Declare Function PatBlt Lib "gdi32" Alias "PatBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal dwRop As Long) As Long
Declare Function Pie Lib "gdi32" Alias "Pie" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Declare Function PlayMetaFile Lib "gdi32" Alias "PlayMetaFile" (ByVal hdc As Long, ByVal hMF As Long) As Long
Declare Function PaintRgn Lib "gdi32" Alias "PaintRgn" (ByVal hdc As Long, ByVal hRgn As Long) As Long
Declare Function PolyPolygon Lib "gdi32" Alias "PolyPolygon" (ByVal hdc As Long, lpPoint As POINTAPI, lpPolyCounts As Long, ByVal nCount As Long) As Long
Declare Function PtInRegion Lib "gdi32" Alias "PtInRegion" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long
Declare Function PtVisible Lib "gdi32" Alias "PtVisible" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Declare Function RectVisible Lib "gdi32" Alias "RectVisible" (ByVal hdc As Long, lpRect As RECT) As Long
Declare Function RectInRegion Lib "gdi32" Alias "RectInRegion" (ByVal hRgn As Long, lpRect As RECT) As Long
Declare Function Rectangle Lib "gdi32" Alias "Rectangle" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function RestoreDC Lib "gdi32" Alias "RestoreDC" (ByVal hdc As Long, ByVal nSavedDC As Long) As Long
Declare Function ResetDC Lib "gdi32" Alias "ResetDCA" (ByVal hdc As Long, lpInitData As DEVMODE) As Long
Declare Function RealizePalette Lib "gdi32" Alias "RealizePalette" (ByVal hdc As Long) As Long
Declare Function RemoveFontResource Lib "gdi32" Alias "RemoveFontResourceA" (ByVal lpFileName As String) As Long
Declare Function RoundRect Lib "gdi32" Alias "RoundRect" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
Declare Function ResizePalette Lib "gdi32" Alias "ResizePalette" (ByVal hPalette As Long, ByVal nNumEntries As Long) As Long

Declare Function SaveDC Lib "gdi32" Alias "SaveDC" (ByVal hdc As Long) As Long
Declare Function SelectClipRgn Lib "gdi32" Alias "SelectClipRgn" (ByVal hdc As Long, ByVal hRgn As Long) As Long
Declare Function ExtSelectClipRgn Lib "gdi32" Alias "ExtSelectClipRgn" (ByVal hdc As Long, ByVal hRgn As Long, ByVal fnMode As Long) As Long
Declare Function SetMetaRgn Lib "gdi32" Alias "SetMetaRgn" (ByVal hdc As Long) As Long
Declare Function SelectObject Lib "gdi32" Alias "SelectObject" (ByVal hdc As Long, ByVal hObject As Long) As Long
Declare Function SelectPalette Lib "gdi32" Alias "SelectPalette" (ByVal hdc As Long, ByVal hPalette As Long, ByVal bForceBackground As Long) As Long
Declare Function SetBkColor Lib "gdi32" Alias "SetBkColor" (ByVal hdc As Long, ByVal crColor As Long) As Long
Declare Function SetBkMode Lib "gdi32" Alias "SetBkMode" (ByVal hdc As Long, ByVal nBkMode As Long) As Long
Declare Function SetBitmapBits Lib "gdi32" Alias "SetBitmapBits" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long

Declare Function SetBoundsRect Lib "gdi32" Alias "SetBoundsRect" (ByVal hdc As Long, lprcBounds As RECT, ByVal flags As Long) As Long
Declare Function SetDIBits Lib "gdi32" Alias "SetDIBits" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Declare Function SetDIBitsToDevice Lib "gdi32" Alias "SetDIBitsToDevice" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal Scan As Long, ByVal NumScans As Long, Bits As Any, BitsInfo As BITMAPINFO, ByVal wUsage As Long) As Long
Declare Function SetMapperFlags Lib "gdi32" Alias "SetMapperFlags" (ByVal hdc As Long, ByVal dwFlag As Long) As Long
Declare Function SetGraphicsMode Lib "gdi32" Alias "SetGraphicsMode" (ByVal hdc As Long, ByVal iMode As Long) As Long
Declare Function SetMapMode Lib "gdi32" Alias "SetMapMode" (ByVal hdc As Long, ByVal nMapMode As Long) As Long
Declare Function SetMetaFileBitsEx Lib "gdi32" Alias "SetMetaFileBitsEx" (ByVal nSize As Long, lpData As Byte) As Long
Declare Function SetPaletteEntries Lib "gdi32" Alias "SetPaletteEntries" (ByVal hPalette As Long, ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries As PALETTEENTRY) As Long
Declare Function SetPixel Lib "gdi32" Alias "SetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Declare Function SetPixelV Lib "gdi32" Alias "SetPixelV" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Declare Function SetPolyFillMode Lib "gdi32" Alias "SetPolyFillMode" (ByVal hdc As Long, ByVal nPolyFillMode As Long) As Long
Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Declare Function SetRectRgn Lib "gdi32" Alias "SetRectRgn" (ByVal hRgn As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function StretchDIBits Lib "gdi32" Alias "StretchDIBits" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal wSrcWidth As Long, ByVal wSrcHeight As Long, lpBits As Any, lpBitsInfo As BITMAPINFO, ByVal wUsage As Long, ByVal dwRop As Long) As Long
Declare Function SetROP2 Lib "gdi32" Alias "SetROP2" (ByVal hdc As Long, ByVal nDrawMode As Long) As Long
Declare Function SetStretchBltMode Lib "gdi32" Alias "SetStretchBltMode" (ByVal hdc As Long, ByVal nStretchMode As Long) As Long
Declare Function SetSystemPaletteUse Lib "gdi32" Alias "SetSystemPaletteUse" (ByVal hdc As Long, ByVal wUsage As Long) As Long
Declare Function SetTextCharacterExtra Lib "gdi32" Alias "SetTextCharacterExtraA" (ByVal hdc As Long, ByVal nCharExtra As Long) As Long
Declare Function SetTextColor Lib "gdi32" Alias "SetTextColor" (ByVal hdc As Long, ByVal crColor As Long) As Long
Declare Function SetTextAlign Lib "gdi32" Alias "SetTextAlign" (ByVal hdc As Long, ByVal wFlags As Long) As Long
Declare Function SetTextJustification Lib "gdi32" Alias "SetTextJustification" (ByVal hdc As Long, ByVal nBreakExtra As Long, ByVal nBreakCount As Long) As Long
Declare Function UpdateColors Lib "gdi32" Alias "UpdateColors" (ByVal hdc As Long) As Long

Declare Function GetProcAddress Lib "kernel32" Alias "GetProcAddress" (ByVal hModule As Long, ByVal lpProcName As String) As Long

Declare Function PlayMetaFileRecord Lib "gdi32" Alias "PlayMetaFileRecord" (ByVal hdc As Long, lpHandletable As HANDLETABLE, lpMetaRecord As METARECORD, ByVal nHandles As Long) As Long

Declare Function CloseEnhMetaFile Lib "gdi32" Alias "CloseEnhMetaFile" (ByVal hdc As Long) As Long
Declare Function CopyEnhMetaFile Lib "gdi32" Alias "CopyEnhMetaFileA" (ByVal hemfSrc As Long, ByVal lpszFile As String) As Long
Declare Function CreateEnhMetaFile Lib "gdi32" Alias "CreateEnhMetaFileA" (ByVal hdcRef As Long, ByVal lpFileName As String, lpRect As RECT, ByVal lpDescription As String) As Long
Declare Function DeleteEnhMetaFile Lib "gdi32" Alias "DeleteEnhMetaFile" (ByVal hemf As Long) As Long
Declare Function EnumEnhMetaFile Lib "gdi32" Alias "EnumEnhMetaFile" (ByVal hdc As Long, ByVal hemf As Long, ByVal lpEnhMetaFunc As Long, lpData As Any, lpRect As RECT) As Long
Declare Function GetEnhMetaFile Lib "gdi32" Alias "GetEnhMetaFileA" (ByVal lpszMetaFile As String) As Long
Declare Function GetEnhMetaFileBits Lib "gdi32" Alias "GetEnhMetaFileBits" (ByVal hemf As Long, ByVal cbBuffer As Long, lpbBuffer As Byte) As Long
Declare Function GetEnhMetaFileDescription Lib "gdi32" Alias "GetEnhMetaFileDescriptionA" (ByVal hemf As Long, ByVal cchBuffer As Long, ByVal lpszDescription As String) As Long
Declare Function GetEnhMetaFileHeader Lib "gdi32" Alias "GetEnhMetaFileHeader" (ByVal hemf As Long, ByVal cbBuffer As Long, lpemh As ENHMETAHEADER) As Long
Declare Function GetEnhMetaFilePaletteEntries Lib "gdi32" Alias "GetEnhMetaFilePaletteEntries" (ByVal hemf As Long, ByVal cEntries As Long, lppe As PALETTEENTRY) As Long
Declare Function GetWinMetaFileBits Lib "gdi32" Alias "GetWinMetaFileBits" (ByVal hemf As Long, ByVal cbBuffer As Long, lpbBuffer As Byte, ByVal fnMapMode As Long, ByVal hdcRef As Long) As Long
Declare Function PlayEnhMetaFile Lib "gdi32" Alias "PlayEnhMetaFile" (ByVal hdc As Long, ByVal hemf As Long, lpRect As RECT) As Long
Declare Function PlayEnhMetaFileRecord Lib "gdi32" Alias "PlayEnhMetaFileRecord" (ByVal hdc As Long, lpHandletable As HANDLETABLE, lpEnhMetaRecord As ENHMETARECORD, ByVal nHandles As Long) As Long
Declare Function SetEnhMetaFileBits Lib "gdi32" Alias "SetEnhMetaFileBits" (ByVal cbBuffer As Long, lpData As Byte) As Long
Declare Function SetWinMetaFileBits Lib "gdi32" Alias "SetWinMetaFileBits" (ByVal cbBuffer As Long, lpbBuffer As Byte, ByVal hdcRef As Long, lpmfp As METAFILEPICT) As Long
Declare Function GdiComment Lib "gdi32" Alias "GdiComment" (ByVal hdc As Long, ByVal cbSize As Long, lpData As Byte) As Long

Declare Function GetTextMetrics Lib "gdi32" Alias "GetTextMetricsA" (ByVal hdc As Long, lpMetrics As TEXTMETRIC) As Long

Declare Function AngleArc Lib "gdi32" Alias "AngleArc" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal dwRadius As Long, ByVal eStartAngle As Double, ByVal eSweepAngle As Double) As Long
Declare Function PolyPolyline Lib "gdi32" Alias "PolyPolyline" (ByVal hdc As Long, lppt As POINTAPI, lpdwPolyPoints As Long, ByVal cCount As Long) As Long
Declare Function GetWorldTransform Lib "gdi32" Alias "GetWorldTransform" (ByVal hdc As Long, lpXform As xform) As Long
Declare Function SetWorldTransform Lib "gdi32" Alias "SetWorldTransform" (ByVal hdc As Long, lpXform As xform) As Long
Declare Function ModifyWorldTransform Lib "gdi32" Alias "ModifyWorldTransform" (ByVal hdc As Long, lpXform As xform, ByVal iMode As Long) As Long
Declare Function CombineTransform Lib "gdi32" Alias "CombineTransform" (lpxformResult As xform, lpxform1 As xform, lpxform2 As xform) As Long

'  Indicadores para COLORADJUSTMENT
Const CA_NEGATIVE = &H1
Const CA_LOG_FILTER = &H2

'  Valores de IlluminantIndex 
Const ILLUMINANT_DEVICE_DEFAULT = 0
Const ILLUMINANT_A = 1
Const ILLUMINANT_B = 2
Const ILLUMINANT_C = 3
Const ILLUMINANT_D50 = 4
Const ILLUMINANT_D55 = 5
Const ILLUMINANT_D65 = 6
Const ILLUMINANT_D75 = 7
Const ILLUMINANT_F2 = 8
Const ILLUMINANT_MAX_INDEX = ILLUMINANT_F2

Const ILLUMINANT_TUNGSTEN = ILLUMINANT_A
Const ILLUMINANT_DAYLIGHT = ILLUMINANT_C
Const ILLUMINANT_FLUORESCENT = ILLUMINANT_F2
Const ILLUMINANT_NTSC = ILLUMINANT_C

'  Mnimo y mximo para RedGamma, GreenGamma, BlueGamma
Const RGB_GAMMA_MIN = 2500 'words
Const RGB_GAMMA_MAX = 65000

'  Mnimo y mximo para ReferenceBlack y ReferenceWhite
Const REFERENCE_WHITE_MIN = 6000 ' palabras
Const REFERENCE_WHITE_MAX = 10000
Const REFERENCE_BLACK_MIN = 0
Const REFERENCE_BLACK_MAX = 4000

'  Mnimo y mximo para Contrast, Brightness, Colorfulness, RedGreenTint
Const COLOR_ADJ_MIN = -100 ' breves
Const COLOR_ADJ_MAX = 100

Type COLORADJUSTMENT
        caSize As Integer
        caFlags As Integer
        caIlluminantIndex As Integer
        caRedGamma As Integer
        caGreenGamma As Integer
        caBlueGamma As Integer
        caReferenceBlack As Integer
        caReferenceWhite As Integer
        caContrast As Integer
        caBrightness As Integer
        caColorfulness As Integer
        caRedGreenTint As Integer
End Type

Declare Function SetColorAdjustment Lib "gdi32" Alias "SetColorAdjustment" (ByVal hdc As Long, lpca As COLORADJUSTMENT) As Long
Declare Function GetColorAdjustment Lib "gdi32" Alias "GetColorAdjustment" (ByVal hdc As Long, lpca As COLORADJUSTMENT) As Long
Declare Function CreateHalftonePalette Lib "gdi32" Alias "CreateHalftonePalette" (ByVal hdc As Long) As Long

Type DOCINFO
        cbSize As Long
        lpszDocName As String
        lpszOutput As String
End Type

Declare Function StartDoc Lib "gdi32" Alias "StartDocA" (ByVal hdc As Long, lpdi As DOCINFO) As Long
Declare Function StartPage Lib "gdi32" Alias "StartPage" (ByVal hdc As Long) As Long
Declare Function EndPage Lib "gdi32" Alias "EndPage" (ByVal hdc As Long) As Long
Declare Function EndDoc Lib "gdi32" Alias "EndDoc" (ByVal hdc As Long) As Long
Declare Function AbortDoc Lib "gdi32" Alias "AbortDoc" (ByVal hdc As Long) As Long

Declare Function AbortPath Lib "gdi32" Alias "AbortPath" (ByVal hdc As Long) As Long
Declare Function ArcTo Lib "gdi32" Alias "ArcTo" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Declare Function BeginPath Lib "gdi32" Alias "BeginPath" (ByVal hdc As Long) As Long
Declare Function CloseFigure Lib "gdi32" Alias "CloseFigure" (ByVal hdc As Long) As Long
Declare Function EndPath Lib "gdi32" Alias "EndPath" (ByVal hdc As Long) As Long
Declare Function FillPath Lib "gdi32" Alias "FillPath" (ByVal hdc As Long) As Long
Declare Function FlattenPath Lib "gdi32" Alias "FlattenPath" (ByVal hdc As Long) As Long
Declare Function GetPath Lib "gdi32" Alias "GetPath" (ByVal hdc As Long, lpPoint As POINTAPI, lpTypes As Byte, ByVal nSize As Long) As Long
Declare Function PathToRegion Lib "gdi32" Alias "PathToRegion" (ByVal hdc As Long) As Long
Declare Function PolyDraw Lib "gdi32" Alias "PolyDraw" (ByVal hdc As Long, lppt As POINTAPI, lpbTypes As Byte, ByVal cCount As Long) As Long
Declare Function SelectClipPath Lib "gdi32" Alias "SelectClipPath" (ByVal hdc As Long, ByVal iMode As Long) As Long
Declare Function SetArcDirection Lib "gdi32" Alias "SetArcDirection" (ByVal hdc As Long, ByVal ArcDirection As Long) As Long
Declare Function SetMiterLimit Lib "gdi32" Alias "SetMiterLimit" (ByVal hdc As Long, ByVal eNewLimit As Double, peOldLimit As Double) As Long
Declare Function StrokeAndFillPath Lib "gdi32" Alias "StrokeAndFillPath" (ByVal hdc As Long) As Long
Declare Function StrokePath Lib "gdi32" Alias "StrokePath" (ByVal hdc As Long) As Long
Declare Function WidenPath Lib "gdi32" Alias "WidenPath" (ByVal hdc As Long) As Long
Declare Function ExtCreatePen Lib "gdi32" Alias "ExtCreatePen" (ByVal dwPenStyle As Long, ByVal dwWidth As Long, lplb As LOGBRUSH, ByVal dwStyleCount As Long, lpStyle As Long) As Long
Declare Function GetMiterLimit Lib "gdi32" Alias "GetMiterLimit" (ByVal hdc As Long, peLimit As Double) As Long
Declare Function GetArcDirection Lib "gdi32" Alias "GetArcDirection" (ByVal hdc As Long) As Long

Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Declare Function MoveToEx Lib "gdi32" Alias "MoveToEx" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Declare Function ExtTextOut Lib "gdi32" Alias "ExtTextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal wOptions As Long, lpRect As Rect, ByVal lpString As String, ByVal nCount As Long, lpDx As Long) As Long
Declare Function PolyTextOut Lib "gdi32" Alias "PolyTextOutA" (ByVal hdc As Long, pptxt As POLYTEXT, cStrings As Long) As Long

Declare Function CreatePolygonRgn Lib "gdi32" Alias "CreatePolygonRgn" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Declare Function DPtoLP Lib "gdi32" Alias "DPtoLP" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long
Declare Function LPtoDP Lib "gdi32" Alias "LPtoDP" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long
Declare Function Polyline Lib "gdi32" Alias "Polyline" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long
Declare Function Polygon Lib "gdi32" Alias "Polygon" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long

Declare Function PolyBezier Lib "gdi32" Alias "PolyBezier" (ByVal hdc As Long, lppt As POINTAPI, ByVal cPoints As Long) As Long
Declare Function PolyBezierTo Lib "gdi32" Alias "PolyBezierTo" (ByVal hdc As Long, lppt As POINTAPI, ByVal cCount As Long) As Long
Declare Function PolylineTo Lib "gdi32" Alias "PolylineTo" (ByVal hdc As Long, lppt As POINTAPI, ByVal cCount As Long) As Long

Declare Function SetViewportExtEx Lib "gdi32" Alias "SetViewportExtEx" (ByVal hdc As Long, ByVal nX As Long, ByVal nY As Long, lpSize As SIZE) As Long
Declare Function SetViewportOrgEx Lib "gdi32" Alias "SetViewportOrgEx" (ByVal hdc As Long, ByVal nX As Long, ByVal nY As Long, lpPoint As POINTAPI) As Long
Declare Function SetWindowOrgEx Lib "gdi32" Alias "SetWindowOrgEx" (ByVal hdc As Long, ByVal nX As Long, ByVal nY As Long, lpPoint As POINTAPI) As Long
Declare Function SetWindowExtEx Lib "gdi32" Alias "SetWindowExtEx" (ByVal hdc As Long, ByVal nX As Long, ByVal nY As Long, lpSize As SIZE) As Long

Declare Function OffsetViewportOrgEx Lib "gdi32" Alias "OffsetViewportOrgEx" (ByVal hdc As Long, ByVal nX As Long, ByVal nY As Long, lpPoint As POINTAPI) As Long
Declare Function OffsetWindowOrgEx Lib "gdi32" Alias "OffsetWindowOrgEx" (ByVal hdc As Long, ByVal nX As Long, ByVal nY As Long, lpPoint As POINTAPI) As Long
Declare Function ScaleWindowExtEx Lib "gdi32" Alias "ScaleWindowExtEx" (ByVal hdc As Long, ByVal nXnum As Long, ByVal nXdenom As Long, ByVal nYnum As Long, ByVal nYdenom As Long, lpSize As SIZE) As Long
Declare Function ScaleViewportExtEx Lib "gdi32" Alias "ScaleViewportExtEx" (ByVal hdc As Long, ByVal nXnum As Long, ByVal nXdenom As Long, ByVal nYnum As Long, ByVal nYdenom As Long, lpSize As SIZE) As Long
Declare Function SetBitmapDimensionEx Lib "gdi32" Alias "SetBitmapDimensionEx" (ByVal hbm As Long, ByVal nX As Long, ByVal nY As Long, lpSize As SIZE) As Long
Declare Function SetBrushOrgEx Lib "gdi32" Alias "SetBrushOrgEx" (ByVal hdc As Long, ByVal nXOrg As Long, ByVal nYOrg As Long, lppt As POINTAPI) As Long

Declare Function GetTextFace Lib "gdi32" Alias "GetTextFaceA" (ByVal hdc As Long, ByVal nCount As Long, ByVal lpFacename As String) As Long

Const FONTMAPPER_MAX = 10

Type KERNINGPAIR
        wFirst As Integer
        wSecond As Integer
        iKernAmount As Long
End Type

Declare Function GetKerningPairs Lib "gdi32" Alias "GetKerningPairsA" (ByVal hdc As Long, ByVal cPairs As Long, lpkrnpair As KERNINGPAIR) As Long

Declare Function GetDCOrgEx Lib "gdi32" Alias "GetDCOrgEx" (ByVal hdc As Long, lpPoint As POINTAPI) As Long
Declare Function UnrealizeObject Lib "gdi32" Alias "UnrealizeObject" (ByVal hObject As Long) As Long

Declare Function GdiFlush Lib "gdi32" Alias "GdiFlush" () As Long
Declare Function GdiSetBatchLimit Lib "gdi32" Alias "GdiSetBatchLimit" (ByVal dwLimit As Long) As Long
Declare Function GdiGetBatchLimit Lib "gdi32" Alias "GdiGetBatchLimit" () As Long

' Constantes de metarchivo ampliadas

Const ENHMETA_SIGNATURE = &H464D4520

'  Indicador de objeto almacenado que se usa en el ndice del
'  controlador de objeto en los registros de metarchivo ampliados.
'  Por ejemplo, el ndice del controlador de objeto (META_STOCK_OBJECT Or BLACK_BRUSH)
'  representa el objeto almacenado BLACK_BRUSH.

Const ENHMETA_STOCK_OBJECT = &H80000000

' Tipos de registro de metarchivo ampliados.

Const EMR_HEADER = 1
Const EMR_POLYBEZIER = 2
Const EMR_POLYGON = 3
Const EMR_POLYLINE = 4
Const EMR_POLYBEZIERTO = 5
Const EMR_POLYLINETO = 6
Const EMR_POLYPOLYLINE = 7
Const EMR_POLYPOLYGON = 8
Const EMR_SETWINDOWEXTEX = 9
Const EMR_SETWINDOWORGEX = 10
Const EMR_SETVIEWPORTEXTEX = 11
Const EMR_SETVIEWPORTORGEX = 12
Const EMR_SETBRUSHORGEX = 13
Const EMR_EOF = 14
Const EMR_SETPIXELV = 15
Const EMR_SETMAPPERFLAGS = 16
Const EMR_SETMAPMODE = 17
Const EMR_SETBKMODE = 18
Const EMR_SETPOLYFILLMODE = 19
Const EMR_SETROP2 = 20
Const EMR_SETSTRETCHBLTMODE = 21
Const EMR_SETTEXTALIGN = 22
Const EMR_SETCOLORADJUSTMENT = 23
Const EMR_SETTEXTCOLOR = 24
Const EMR_SETBKCOLOR = 25
Const EMR_OFFSETCLIPRGN = 26
Const EMR_MOVETOEX = 27
Const EMR_SETMETARGN = 28
Const EMR_EXCLUDECLIPRECT = 29
Const EMR_INTERSECTCLIPRECT = 30
Const EMR_SCALEVIEWPORTEXTEX = 31
Const EMR_SCALEWINDOWEXTEX = 32
Const EMR_SAVEDC = 33
Const EMR_RESTOREDC = 34
Const EMR_SETWORLDTRANSFORM = 35
Const EMR_MODIFYWORLDTRANSFORM = 36
Const EMR_SELECTOBJECT = 37
Const EMR_CREATEPEN = 38
Const EMR_CREATEBRUSHINDIRECT = 39
Const EMR_DELETEOBJECT = 40
Const EMR_ANGLEARC = 41
Const EMR_ELLIPSE = 42
Const EMR_RECTANGLE = 43
Const EMR_ROUNDRECT = 44
Const EMR_ARC = 45
Const EMR_CHORD = 46
Const EMR_PIE = 47
Const EMR_SELECTPALETTE = 48
Const EMR_CREATEPALETTE = 49
Const EMR_SETPALETTEENTRIES = 50
Const EMR_RESIZEPALETTE = 51
Const EMR_REALIZEPALETTE = 52
Const EMR_EXTFLOODFILL = 53
Const EMR_LINETO = 54
Const EMR_ARCTO = 55
Const EMR_POLYDRAW = 56
Const EMR_SETARCDIRECTION = 57
Const EMR_SETMITERLIMIT = 58
Const EMR_BEGINPATH = 59
Const EMR_ENDPATH = 60
Const EMR_CLOSEFIGURE = 61
Const EMR_FILLPATH = 62
Const EMR_STROKEANDFILLPATH = 63
Const EMR_STROKEPATH = 64
Const EMR_FLATTENPATH = 65
Const EMR_WIDENPATH = 66
Const EMR_SELECTCLIPPATH = 67
Const EMR_ABORTPATH = 68

Const EMR_GDICOMMENT = 70
Const EMR_FILLRGN = 71
Const EMR_FRAMERGN = 72
Const EMR_INVERTRGN = 73
Const EMR_PAINTRGN = 74
Const EMR_EXTSELECTCLIPRGN = 75
Const EMR_BITBLT = 76
Const EMR_STRETCHBLT = 77
Const EMR_MASKBLT = 78
Const EMR_PLGBLT = 79
Const EMR_SETDIBITSTODEVICE = 80
Const EMR_STRETCHDIBITS = 81
Const EMR_EXTCREATEFONTINDIRECTW = 82
Const EMR_EXTTEXTOUTA = 83
Const EMR_EXTTEXTOUTW = 84
Const EMR_POLYBEZIER16 = 85
Const EMR_POLYGON16 = 86
Const EMR_POLYLINE16 = 87
Const EMR_POLYBEZIERTO16 = 88
Const EMR_POLYLINETO16 = 89
Const EMR_POLYPOLYLINE16 = 90
Const EMR_POLYPOLYGON16 = 91
Const EMR_POLYDRAW16 = 92
Const EMR_CREATEMONOBRUSH = 93
Const EMR_CREATEDIBPATTERNBRUSHPT = 94
Const EMR_EXTCREATEPEN = 95
Const EMR_POLYTEXTOUTA = 96
Const EMR_POLYTEXTOUTW = 97

Const EMR_MIN = 1
Const EMR_MAX = 97

Type emr
        iType As Long
        nSize As Long
End Type

Type emrtext
        ptlReference As POINTL
        nchars As Long
        offString As Long
        fOptions As Long
        rcl As RECTL
        offDx As Long
End Type

Type EMRABORTPATH
        pEmr As emr
End Type

Type EMRBEGINPATH
        pEmr As emr
End Type

Type EMRENDPATH
        pEmr As emr
End Type

Type EMRCLOSEFIGURE
        pEmr As emr
End Type

Type EMRFLATTENPATH
        pEmr As emr
End Type

Type EMRWIDENPATH
        pEmr As emr
End Type

Type EMRSETMETARGN
        pEmr As emr
End Type

Type EMREMRSAVEDC
        pEmr As emr
End Type

Type EMRREALIZEPALETTE
        pEmr As emr
End Type

Type EMRSELECTCLIPPATH
        pEmr As emr
        iMode As Long
End Type

Type EMRSETBKMODE
        pEmr As emr
        iMode As Long
End Type

Type EMRSETMAPMODE
        pEmr As emr
        iMode As Long
End Type

Type EMRSETPOLYFILLMODE
        pEmr As emr
        iMode As Long
End Type

Type EMRSETROP2
        pEmr As emr
        iMode As Long
End Type

Type EMRSETSTRETCHBLTMODE
        pEmr As emr
        iMode As Long
End Type

Type EMRSETTEXTALIGN
        pEmr As emr
        iMode As Long
End Type

Type EMRSETMITERLIMIT
        pEmr As emr
        eMiterLimit As Double
End Type

Type EMRRESTOREDC
        pEmr As emr
        iRelative As Long
End Type

Type EMRSETARCDIRECTION
        pEmr As emr
        iArcDirection As Long
End Type

Type EMRSETMAPPERFLAGS
        pEmr As emr
        dwFlags As Long
End Type

Type EMRSETTEXTCOLOR
        pEmr As emr
        crColor As Long
End Type

Type EMRSETBKCOLOR
        pEmr As emr
        crColor As Long
End Type

Type EMRSELECTOBJECT
        pEmr As emr
        ihObject As Long
End Type

Type EMRDELETEOBJECT
        pEmr As emr
        ihObject As Long
End Type

Type EMRSELECTPALETTE
        pEmr As emr
        ihPal As Long
End Type

Type EMRRESIZEPALETTE
        pEmr As emr
        ihPal As Long
        cEntries As Long
End Type

Type EMRSETPALETTEENTRIES
        pEmr As emr
        ihPal As Long
        iStart As Long
        cEntries As Long
        aPalEntries(1) As PALETTEENTRY
End Type

Type EMRSETCOLORADJUSTMENT
        pEmr As emr
        ColorAdjustment As ColorAdjustment
End Type

Type EMRGDICOMMENT
        pEmr As emr
        cbData As Long
        Data(1) As Integer
End Type

Type EMREOF
        pEmr As emr
        nPalEntries As Long
        offPalEntries As Long
        nSizeLast As Long
End Type

Type EMRLINETO
        pEmr As emr
        ptl As POINTL
End Type

Type EMRMOVETOEX
        pEmr As emr
        ptl As POINTL
End Type

Type EMROFFSETCLIPRGN
        pEmr As emr
        ptlOffset As POINTL
End Type

Type EMRFILLPATH
        pEmr As emr
        rclBounds As RECTL
End Type

Type EMRSTROKEANDFILLPATH
        pEmr As emr
        rclBounds As RECTL
End Type

Type EMRSTROKEPATH
        pEmr As emr
        rclBounds As RECTL
End Type

Type EMREXCLUDECLIPRECT
        pEmr As emr
        rclClip As RECTL
End Type

Type EMRINTERSECTCLIPRECT
        pEmr As emr
        rclClip As RECTL
End Type

Type EMRSETVIEWPORTORGEX
        pEmr As emr
        ptlOrigin As POINTL
End Type

Type EMRSETWINDOWORGEX
        pEmr As emr
        ptlOrigin As POINTL
End Type

Type EMRSETBRUSHORGEX
        pEmr As emr
        ptlOrigin As POINTL
End Type

Type EMRSETVIEWPORTEXTEX
        pEmr As emr
        szlExtent As SIZEL
End Type

Type EMRSETWINDOWEXTEX
        pEmr As emr
        szlExtent As SIZEL
End Type

Type EMRSCALEVIEWPORTEXTEX
        pEmr As emr
        xNum As Long
        xDenom As Long
        yNum As Long
        yDemon As Long
End Type

Type EMRSCALEWINDOWEXTEX
        pEmr As emr
        xNum As Long
        xDenom As Long
        yNum As Long
        yDemon As Long
End Type

Type EMRSETWORLDTRANSFORM
        pEmr As emr
        xform As XFORM
End Type

Type EMRMODIFYWORLDTRANSFORM
        pEmr As emr
        xform As XFORM
        iMode As Long
End Type

Type EMRSETPIXELV
        pEmr As emr
        ptlPixel As POINTL
        crColor As Long
End Type

Type EMREXTFLOODFILL
        pEmr As emr
        ptlStart As POINTL
        crColor As Long
        iMode As Long
End Type

Type EMRELLIPSE
        pEmr As emr
        rclBox As RECTL
End Type

Type EMRRECTANGLE
        pEmr As emr
        rclBox As RECTL
End Type

Type EMRROUNDRECT
        pEmr As emr
        rclBox As RECTL
        szlCorner As SIZEL
End Type

Type EMRARC
        pEmr As emr
        rclBox As RECTL
        ptlStart As POINTL
        ptlEnd As POINTL
End Type

Type EMRARCTO
        pEmr As emr
        rclBox As RECTL
        ptlStart As POINTL
        ptlEnd As POINTL
End Type

Type EMRCHORD
        pEmr As emr
        rclBox As RECTL
        ptlStart As POINTL
        ptlEnd As POINTL
End Type

Type EMRPIE
        pEmr As emr
        rclBox As RECTL
        ptlStart As POINTL
        ptlEnd As POINTL
End Type

Type EMRANGLEARC
        pEmr As emr
        ptlCenter As POINTL
        nRadius As Long
        eStartAngle As Double
        eSweepAngle As Double
End Type

Type EMRPOLYLINE
        pEmr As emr
        rclBounds As RECTL
        cptl As Long
        aptl(1) As POINTL
End Type

Type EMRPOLYBEZIER
        pEmr As emr
        rclBounds As RECTL
        cptl As Long
        aptl(1) As POINTL
End Type

Type EMRPOLYGON
        pEmr As emr
        rclBounds As RECTL
        cptl As Long
        aptl(1) As POINTL
End Type

Type EMRPOLYBEZIERTO
        pEmr As emr
        rclBounds As RECTL
        cptl As Long
        aptl(1) As POINTL
End Type

Type EMRPOLYLINE16
        pEmr As emr
        rclBounds As RECTL
        cpts As Long
        apts(1) As POINTS
End Type

Type EMRPOLYBEZIER16
        pEmr As emr
        rclBounds As RECTL
        cpts As Long
        apts(1) As POINTS
End Type

Type EMRPOLYGON16
        pEmr As emr
        rclBounds As RECTL
        cpts As Long
        apts(1) As POINTS
End Type

Type EMRPLOYBEZIERTO16
        pEmr As emr
        rclBounds As RECTL
        cpts As Long
        apts(1) As POINTS
End Type

Type EMRPOLYLINETO16
        pEmr As emr
        rclBounds As RECTL
        cpts As Long
        apts(1) As POINTS
End Type

Type EMRPOLYDRAW
        pEmr As emr
        rclBounds As RECTL
        cptl As Long
        aptl(1) As POINTL
        abTypes(1) As Integer
End Type

Type EMRPOLYDRAW16
        pEmr As emr
        rclBounds As RECTL
        cpts As Long
        apts(1) As POINTS
        abTypes(1) As Integer
End Type

Type EMRPOLYPOLYLINE
        pEmr As emr
        rclBounds As RECTL
        nPolys As Long
        cptl As Long
        aPolyCounts(1) As Long
        aptl(1) As POINTL
End Type

Type EMRPOLYPOLYGON
        pEmr As emr
        rclBounds As RECTL
        nPolys As Long
        cptl As Long
        aPolyCounts(1) As Long
        aptl(1) As POINTL
End Type

Type EMRPOLYPOLYLINE16
        pEmr As emr
        rclBounds As RECTL
        nPolys As Long
        cpts As Long
        aPolyCounts(1) As Long
        apts(1) As POINTS
End Type

Type EMRPOLYPOLYGON16
        pEmr As emr
        rclBounds As RECTL
        nPolys As Long
        cpts As Long
        aPolyCounts(1) As Long
        apts(1) As POINTS
End Type

Type EMRINVERTRGN
        pEmr As emr
        rclBounds As RECTL
        cbRgnData As Long
        RgnData(1) As Integer
End Type

Type EMRPAINTRGN
        pEmr As emr
        rclBounds As RECTL
        cbRgnData As Long
        RgnData(1) As Integer
End Type

Type EMRFILLRGN
        pEmr As emr
        rclBounds As RECTL
        cbRgnData As Long
        ihBrush As Long
        RgnData(1) As Integer
End Type

Type EMRFRAMERGN
        pEmr As emr
        rclBounds As RECTL
        cbRgnData As Long
        ihBrush As Long
        szlStroke As SIZEL
        RgnData(1) As Integer
End Type

Type EMREXTSELECTCLIPRGN
        pEmr As emr
        cbRgnData As Long
        iMode As Long
        RgnData(1) As Integer
End Type

Type EMREXTTEXTOUT
        pEmr As emr
        rclBounds As RECTL
        iGraphicsMode As Long
        exScale As Double
        eyScale As Double
        emrtext As emrtext
End Type

Type EMRBITBLT
        pEmr As emr
        rclBounds As RECTL
        xDest As Long
        yDest As Long
        cxDest As Long
        cyDest As Long
        dwRop As Long
        xSrc As Long
        ySrc As Long
        xformSrc As xform
        crBkColorSrc As Long
        iUsageSrc As Long
        offBmiSrc As Long
        cbBmiSrc As Long
        offBitsSrc As Long
        cbBitsSrc As Long
End Type

Type EMRSTRETCHBLT
        pEmr As emr
        rclBounds As RECTL
        xDest As Long
        yDest As Long
        cxDest As Long
        cyDest As Long
        dwRop As Long
        xSrc As Long
        ySrc As Long
        xformSrc As xform
        crBkColorSrc As Long
        iUsageSrc As Long
        offBmiSrc As Long
        cbBmiSrc As Long
        offBitsSrc As Long
        cbBitsSrc As Long
        cxSrc As Long
        cySrc As Long
End Type

Type EMRMASKBLT
        pEmr As emr
        rclBounds As RECTL
        xDest As Long
        yDest As Long
        cxDest As Long
        cyDest As Long
        dwRop As Long
        xSrc2 As Long
        cyDest2 As Long
        dwRop2 As Long
        xSrc As Long
        ySrc As Long
        xformSrc As XFORM
        crBkColorSrc As Long
        iUsageSrc As Long
        offBmiSrc As Long
        cbBmiSrc As Long
        offBitsSrc As Long
        cbBitsSrc As Long
        xMask As Long
        yMask As Long
        iUsageMask As Long
        offBmiMask As Long
        cbBmiMask As Long
        offBitsMask As Long
        cbBitsMask As Long
End Type

Type EMRPLGBLT
        pEmr As emr
        rclBounds As RECTL
        aptlDest(3) As POINTL
        xSrc As Long
        ySrc As Long
        cxSrc As Long
        cySrc As Long
        xformSrc As XFORM
        crBkColorSrc As Long
        iUsageSrc As Long
        offBmiSrc As Long
        cbBmiSrc As Long
        offBitsSrc As Long
        cbBitsSrc As Long
        xMask As Long
        yMask As Long
        iUsageMask As Long
        offBmiMask As Long
        cbBmiMask As Long
        offBitsMask As Long
        cbBitsMask As Long
End Type

Type EMRSETDIBITSTODEVICE
        pEmr As emr
        rclBounds As RECTL
        xDest As Long
        yDest As Long
        xSrc As Long
        ySrc As Long
        cxSrc As Long
        cySrc As Long
        offBmiSrc As Long
        cbBmiSrc As Long
        offBitsSrc As Long
        cbBitsSrc As Long
        iUsageSrc As Long
        iStartScan As Long
        cScans As Long
End Type

Type EMRSTRETCHDIBITS
        pEmr As emr
        rclBounds As RECTL
        xDest As Long
        yDest As Long
        xSrc As Long
        ySrc As Long
        cxSrc As Long
        cySrc As Long
        offBmiSrc As Long
        cbBmiSrc As Long
        offBitsSrc As Long
        cbBitsSrc As Long
        iUsageSrc As Long
        dwRop As Long
        cxDest As Long
        cyDest As Long
End Type

Type EMREXTCREATEFONTINDIRECT
        pEmr As emr
        ihFont As Long
        elfw As EXTLOGFONT
End Type

Type EMRCREATEPALETTE
        pEmr As emr
        ihPal As Long
        lgpl As LOGPALETTE
End Type

Type EMRCREATEPEN
        pEmr As emr
        ihPen As Long
        lopn As LOGPEN
End Type

Type EMREXTCREATEPEN
        pEmr As emr
        ihPen As Long
        offBmi As Long
        cbBmi As Long
        offBits As Long
        cbBits As Long
        elp As EXTLOGPEN
End Type

Type EMRCREATEBRUSHINDIRECT
        pEmr As emr
        ihBrush As Long
        lb As LOGBRUSH
End Type

Type EMRCREATEMONOBRUSH
        pEmr As emr
        ihBrush As Long
        iUsage As Long
        offBmi As Long
        cbBmi As Long
        offBits As Long
        cbBits As Long
End Type

Type EMRCREATEDIBPATTERNBRUSHPT
        pEmr As emr
        ihBursh As Long
        iUsage As Long
        offBmi As Long
        cbBmi As Long
        offBits As Long
        cbBits As Long
End Type

' wingdi nuevo
' *************************************************************************
' *                                                                         *
' * wingdi.h -- Declaraciones, definicin de constantes y macros del        *
' * procedimiento GDI                                                       *
' *                                                                         *
' * Copyright (c) 1985-1995, Microsoft Corp. Reservados todos los derechos. *
' *                                                                         *
' **************************************************************************/

'  Modos de StretchBlt() 
Const STRETCH_ANDSCANS = 1
Const STRETCH_ORSCANS = 2
Const STRETCH_DELETESCANS = 3
Const STRETCH_HALFTONE = 4

Type BITMAPV4HEADER
        bV4Size As Long
        bV4Width As Long
        bV4Height As Long
        bV4Planes As Integer
        bV4BitCount As Integer
        bV4V4Compression As Long
        bV4SizeImage As Long
        bV4XPelsPerMeter As Long
        bV4YPelsPerMeter As Long
        bV4ClrUsed As Long
        bV4ClrImportant As Long
        bV4RedMask As Long
        bV4GreenMask As Long
        bV4BlueMask As Long
        bV4AlphaMask As Long
        bV4CSType As Long
        bV4Endpoints As Long
        bV4GammaRed As Long
        bV4GammaGreen As Long
        bV4GammaBlue As Long
End Type

Type FONTSIGNATURE
        fsUsb(4) As Long
        fsCsb(2) As Long
End Type

Type CHARSETINFO
        ciCharset As Long
        ciACP As Long
        fs As FONTSIGNATURE
End Type

Const TCI_SRCCHARSET = 1
Const TCI_SRCCODEPAGE = 2
Const TCI_SRCFONTSIG = 3

Type LOCALESIGNATURE
        lsUsb(4) As Long
        lsCsbDefault(2) As Long
        lsCsbSupported(2) As Long
End Type

Type NEWTEXTMETRICEX
        ntmTm As NEWTEXTMETRIC
        ntmFontSig As FONTSIGNATURE
End Type

Type ENUMLOGFONTEX
        elfLogFont As LOGFONT
        elfFullName(LF_FULLFACESIZE) As Byte
        elfStyle(LF_FACESIZE) As Byte
        elfScript(LF_FACESIZE) As Byte
End Type

Const MONO_FONT = 8
Const JOHAB_CHARSET = 130
Const HEBREW_CHARSET = 177
Const ARABIC_CHARSET = 178
Const GREEK_CHARSET = 161
Const TURKISH_CHARSET = 162
Const THAI_CHARSET = 222
Const EASTEUROPE_CHARSET = 238
Const RUSSIAN_CHARSET = 204

Const MAC_CHARSET = 77
Const BALTIC_CHARSET = 186

Const FS_LATIN1 = &H1&
Const FS_LATIN2 = &H2&
Const FS_CYRILLIC = &H4&
Const FS_GREEK = &H8&
Const FS_TURKISH = &H10&
Const FS_HEBREW = &H20&
Const FS_ARABIC = &H40&
Const FS_BALTIC = &H80&
Const FS_THAI = &H10000
Const FS_JISJAPAN = &H20000
Const FS_CHINESESIMP = &H40000
Const FS_WANSUNG = &H80000
Const FS_CHINESETRAD = &H100000
Const FS_JOHAB = &H200000
Const FS_SYMBOL = &H80000000
Const DEFAULT_GUI_FONT = 17
'  Versin actual de especificacin 
Const DM_RESERVED1 = &H800000
Const DM_RESERVED2 = &H1000000
Const DM_ICMMETHOD = &H2000000
Const DM_ICMINTENT = &H4000000
Const DM_MEDIATYPE = &H8000000
Const DM_DITHERTYPE = &H10000000
Const DMPAPER_ISO_B4 = 42                '  B4 (ISO) 250 x 353 mm
Const DMPAPER_JAPANESE_POSTCARD = 43     '  Tarjeta japonesa 100 x 148 mm
Const DMPAPER_9X11 = 44                  '  9 x 11 pulg.
Const DMPAPER_10X11 = 45                 '  10 x 11 pulg.
Const DMPAPER_15X11 = 46                 '  15 x 11 pulg.
Const DMPAPER_ENV_INVITE = 47            '  Sobre Invitacin 220 x 220 mm
Const DMPAPER_RESERVED_48 = 48           '  RESERVADO--NO LO USE
Const DMPAPER_RESERVED_49 = 49           '  RESERVADO--NO LO USE
Const DMPAPER_LETTER_EXTRA = 50              '  Carta Extra 9 \275 x 12 pulg.
Const DMPAPER_LEGAL_EXTRA = 51               '  Oficio Extra 9 \275 x 15 pulg.
Const DMPAPER_TABLOID_EXTRA = 52              '  Tabloide Extra 11.69 x 18 pulg.
Const DMPAPER_A4_EXTRA = 53                   '  A4 Extra 9.27 x 12.69 pulg.
Const DMPAPER_LETTER_TRANSVERSE = 54     '  Carta Transversal 8 \275 x 11 pulg.
Const DMPAPER_A4_TRANSVERSE = 55         '  A4 Transversal 210 x 297 mm
Const DMPAPER_LETTER_EXTRA_TRANSVERSE = 56 '  Carta Extra Transversal 9\275 x 12 pulg.
Const DMPAPER_A_PLUS = 57                '  SuperA/SuperA/A4 227 x 356 mm
Const DMPAPER_B_PLUS = 58                '  SuperB/SuperB/A3 305 x 487 mm
Const DMPAPER_LETTER_PLUS = 59           '  Carta Plus 8.5 x 12.69 pulg.
Const DMPAPER_A4_PLUS = 60               '  A4 Plus 210 x 330 mm
Const DMPAPER_A5_TRANSVERSE = 61         '  A5 Transversal 148 x 210 mm
Const DMPAPER_B5_TRANSVERSE = 62         '  B5 (JIS) Transversal 182 x 257 mm
Const DMPAPER_A3_EXTRA = 63              '  A3 Extra 322 x 445 mm
Const DMPAPER_A5_EXTRA = 64              '  A5 Extra 174 x 235 mm
Const DMPAPER_B5_EXTRA = 65              '  B5 (ISO) Extra 201 x 276 mm
Const DMPAPER_A2 = 66                    '  A2 420 x 594 mm
Const DMPAPER_A3_TRANSVERSE = 67         '  A3 Transversal 297 x 420 mm
Const DMPAPER_A3_EXTRA_TRANSVERSE = 68   '  A3 Extra Transversal 322 x 445 mm
Const DMTT_DOWNLOAD_OUTLINE = 4 '  descarga fuentes TT como transferibles de esquema

'  Mtodos ICM
Const DMICMMETHOD_NONE = 1       '  ICM desactivado
Const DMICMMETHOD_SYSTEM = 2     '  ICM controlado por el sistema
Const DMICMMETHOD_DRIVER = 3     '  ICM controlado por el controlador 
Const DMICMMETHOD_DEVICE = 4     '  ICM controlado por el dispositivo
Const DMICMMETHOD_USER = 256     '  Los mtodos especficos del dispositivo comienzan aqu

'  Intentos de ICM 
Const DMICM_SATURATE = 1         '  Maximiza la saturacin del color
Const DMICM_CONTRAST = 2         '  Maximiza el contraste de color
Const DMICM_COLORMETRIC = 3      '  Usa una medida de color especfica
Const DMICM_USER = 256           '  Los intentos especficos del dispositivo comienzan aqu

'  Tipos de medios
Const DMMEDIA_STANDARD = 1         '  Papel estndar
Const DMMEDIA_GLOSSY = 2           '  Papel satinado
Const DMMEDIA_TRANSPARENCY = 3     '  Transparencia

Const DMMEDIA_USER = 256           '  Los soportes especficos del dispositivo comienzan aqu

'  Tipos de difuminado
Const DMDITHER_NONE = 1          '  Sin difuminado
Const DMDITHER_COARSE = 2        '  Difumina con un pincel grueso
Const DMDITHER_FINE = 3          '  Difumina con un pincel fino
Const DMDITHER_LINEART = 4       '  Difuminado con arte de lneas
Const DMDITHER_GRAYSCALE = 5     '  El dispositivo hace la escala de gris
Const DMDITHER_USER = 256        '  Los difuminados especficos del dispositivo comienzan aqu
Const GGO_GRAY2_BITMAP = 4
Const GGO_GRAY4_BITMAP = 5
Const GGO_GRAY8_BITMAP = 6
Const GGO_GLYPH_INDEX = &H80
Const GCP_DBCS = &H1
Const GCP_REORDER = &H2
Const GCP_USEKERNING = &H8
Const GCP_GLYPHSHAPE = &H10
Const GCP_LIGATE = &H20
Const GCP_DIACRITIC = &H100
Const GCP_KASHIDA = &H400
Const GCP_ERROR = &H8000
Const FLI_MASK = &H103B
Const GCP_JUSTIFY = &H10000
Const GCP_NODIACRITICS = &H20000
Const FLI_GLYPHS = &H40000
Const GCP_CLASSIN = &H80000
Const GCP_MAXEXTENT = &H100000
Const GCP_JUSTIFYIN = &H200000
Const GCP_DISPLAYZWG = &H400000
Const GCP_SYMSWAPOFF = &H800000
Const GCP_NUMERICOVERRIDE = &H1000000
Const GCP_NEUTRALOVERRIDE = &H2000000
Const GCP_NUMERICSLATIN = &H4000000
Const GCP_NUMERICSLOCAL = &H8000000
Const GCPCLASS_LATIN = 1
Const GCPCLASS_HEBREW = 2
Const GCPCLASS_ARABIC = 2
Const GCPCLASS_NEUTRAL = 3
Const GCPCLASS_LOCALNUMBER = 4
Const GCPCLASS_LATINNUMBER = 5
Const GCPCLASS_LATINNUMERICTERMINATOR = 6
Const GCPCLASS_LATINNUMERICSEPARATOR = 7
Const GCPCLASS_NUMERICSEPARATOR = 8
Const GCPCLASS_PREBOUNDRTL = &H80
Const GCPCLASS_PREBOUNDLTR = &H40



Type GCP_RESULTS
        lStructSize As Long
        lpOutString As String
        lpOrder As Long
        lpDX As Long
        lpCaretPos As Long
        lpClass As String
        lpGlyphs As String
        nGlyphs As Long
        nMaxFit As Long
End Type

Const DC_BINADJUST = 19
Const DC_EMF_COMPLIANT = 20
Const DC_DATATYPE_PRODUCED = 21
Const DC_COLLATE = 22

Const DCTT_DOWNLOAD_OUTLINE = &H8&

'  Valores de retorno para DC_BINADJUST
Const DCBA_FACEUPNONE = &H0
Const DCBA_FACEUPCENTER = &H1
Const DCBA_FACEUPLEFT = &H2
Const DCBA_FACEUPRIGHT = &H3
Const DCBA_FACEDOWNNONE = &H100
Const DCBA_FACEDOWNCENTER = &H101
Const DCBA_FACEDOWNLEFT = &H102
Const DCBA_FACEDOWNRIGHT = &H103

Declare Function EnumFontFamilies Lib "gdi32" Alias "EnumFontFamiliesA" (ByVal hdc As Long, ByVal lpszFamily As String, ByVal lpEnumFontFamProc As Long, ByVal lParam As Long) As Long
Declare Function EnumFontFamiliesEx Lib "gdi32" Alias "EnumFontFamiliesExA" (ByVal hdc As Long, lpLogFont As LOGFONT, ByVal lpEnumFontProc As Long, ByVal lParam As Long, ByVal dw As Long) As Long
Declare Function GetTextCharset Lib "gdi32" Alias "GetTextCharset" (ByVal hdc As Long) As Long
Declare Function GetTextCharsetInfo Lib "gdi32" Alias "GetTextCharsetInfo" (ByVal hdc As Long, lpSig As FONTSIGNATURE, ByVal dwFlags As Long) As Long

Declare Function TranslateCharsetInfo Lib "gdi32" Alias "TranslateCharsetInfo" (lpSrc As Long, lpcs As CHARSETINFO, ByVal dwFlags As Long) As Long
Declare Function GetFontLanguageInfo Lib "gdi32" Alias "GetFontLanguageInfo" (ByVal hdc As Long) As Long
Declare Function GetCharacterPlacement Lib "gdi32" Alias " GetCharacterPlacementA" (ByVal hdc As Long, ByVal lpsz As String, ByVal n1 As Long, ByVal n2 As Long, lpGcpResults As GCP_RESULTS, ByVal dw As Long) As Long

Const ICM_OFF = 1
Const ICM_ON = 2
Const ICM_QUERY = 3

Type CIEXYZ
	ciexyzX As Long
	ciexyzY As Long
	ciexyzZ As Long
End Type

Type CIEXYZTRIPLE
    ciexyzRed As CIEXYZ
    ciexyzGreen As CIEXYZ
    ciexyBlue As CIEXYZ
End Type

Type LOGCOLORSPACE
    lcsSignature As Long
    lcsVersion As Long
    lcsSize As Long
    lcsCSType As Long
    lcsIntent As Long
    lcsEndPoints As CIEXYZTRIPLE
    lcsGammaRed As Long
    lcsGammaGreen As Long
    lcsGammaBlue As Long
    lcsFileName As String * MAX_PATH
End Type

Declare Function SetICMMode Lib "gdi32" Alias "SetICMMode" (ByVal hdc As Long, ByVal n As Long) As Long
Declare Function CheckColorsInGamut Lib "gdi32" Alias "CheckColorsInGamut" (ByVal hdc As Long, lpv As Any, lpv2 As Any, ByVal dw As Long) As Long
Declare Function GetLogColorSpace Lib "gdi32" Alias "GetLogColorSpaceA" (ByVal hcolorspace As Long, ByVal lplogcolorspace As LOGCOLORSPACE, ByVal dw As Long) As Long
Declare Function GetColorSpace Lib "gdi32" Alias "GetColorSpace" (ByVal hdc As Long) As Long

Declare Function CreateColorSpace Lib "gdi32" Alias "CreateColorSpaceA" (lplogcolorspace As LOGCOLORSPACE) As Long

Declare Function SetColorSpace Lib "gdi32" Alias "SetColorSpace" (ByVal hdc As Long, ByVal hcolorspace As Long) As Long
Declare Function DeleteColorSpace Lib "gdi32" Alias "DeleteColorSpace" (ByVal hcolorspace As Long) As Long
Declare Function GetICMProfile Lib "gdi32" Alias "GetICMProfileA" (ByVal hdc As Long, ByVal dw As Long, ByVal lpStr As String) As Long
Declare Function SetICMProfile Lib "gdi32" Alias "SetICMProfileA" (ByVal hdc As Long, ByVal lpStr As String) As Long
Declare Function GetDeviceGammaRamp Lib "gdi32" Alias "GetDeviceGammaRamp" (ByVal hdc As Long, lpv As Any) As Long
Declare Function SetDeviceGammaRamp Lib "gdi32" Alias "SetDeviceGammaRamp" (ByVal hdc As Long, lpv As Any) As Long
Declare Function ColorMatchToTarget Lib "gdi32" Alias "ColorMatchToTarget" (ByVal hdc As Long, ByVal hdc2 As Long, ByVal dw As Long) As Long

Declare Function EnumICMProfiles Lib "gdi32" Alias "EnumICMProfilesA" (ByVal hdc As Long, ByVal icmEnumProc As Long, ByVal lParam As Long) As Long

Const EMR_SETICMMODE = 98
Const EMR_CREATECOLORSPACE = 99
Const EMR_SETCOLORSPACE = 100
Const EMR_DELETECOLORSPACE = 101

Type EMRSELECTCOLORSPACE
        pEmr As emr
        ihCS As Long               '  ndice del controlador ColorSpace 
End Type

Type EMRCREATECOLORSPACE
        pEmr As emr
        ihCS As Long               '  ndice del controlador ColorSpace 
        lcs As LOGCOLORSPACE
End Type


' --------------
'  Seccin USER 
' --------------

' Constantes de barra de desplazamiento
Const SB_HORZ = 0
Const SB_VERT = 1
Const SB_CTL = 2
Const SB_BOTH = 3

' Comandos de barra de desplazamiento
Const SB_LINEUP = 0
Const SB_LINELEFT = 0
Const SB_LINEDOWN = 1
Const SB_LINERIGHT = 1
Const SB_PAGEUP = 2
Const SB_PAGELEFT = 2
Const SB_PAGEDOWN = 3
Const SB_PAGERIGHT = 3
Const SB_THUMBPOSITION = 4
Const SB_THUMBTRACK = 5
Const SB_TOP = 6
Const SB_LEFT = 6
Const SB_BOTTOM = 7
Const SB_RIGHT = 7
Const SB_ENDSCROLL = 8

' Comandos de ShowWindow() 
Const SW_HIDE = 0
Const SW_SHOWNORMAL = 1
Const SW_NORMAL = 1
Const SW_SHOWMINIMIZED = 2
Const SW_SHOWMAXIMIZED = 3
Const SW_MAXIMIZE = 3
Const SW_SHOWNOACTIVATE = 4
Const SW_SHOW = 5
Const SW_MINIMIZE = 6
Const SW_SHOWMINNOACTIVE = 7
Const SW_SHOWNA = 8
Const SW_RESTORE = 9
Const SW_SHOWDEFAULT = 10
Const SW_MAX = 10

' Antiguos comandos de ShowWindow() 
Const HIDE_WINDOW = 0
Const SHOW_OPENWINDOW = 1
Const SHOW_ICONWINDOW = 2
Const SHOW_FULLSCREEN = 3
Const SHOW_OPENNOACTIVATE = 4

' Identificadores para el mensaje WM_SHOWWINDOW 
Const SW_PARENTCLOSING = 1
Const SW_OTHERZOOM = 2
Const SW_PARENTOPENING = 3
Const SW_OTHERUNZOOM = 4

' Indicadores WM_KEYUP/DOWN/CHAR HIWORD(lParam) 
Const KF_EXTENDED = &H100
Const KF_DLGMODE = &H800
Const KF_MENUMODE = &H1000
Const KF_ALTDOWN = &H2000
Const KF_REPEAT = &H4000
Const KF_UP = &H8000

' Teclas virtuales, juego estndar
Const VK_LBUTTON = &H1
Const VK_RBUTTON = &H2
Const VK_CANCEL = &H3
Const VK_MBUTTON = &H4             '  NO es contiguo a L RBUTTON

Const VK_BACK = &H8
Const VK_TAB = &H9

Const VK_CLEAR = &HC
Const VK_RETURN = &HD

Const VK_SHIFT = &H10
Const VK_CONTROL = &H11
Const VK_MENU = &H12
Const VK_PAUSE = &H13
Const VK_CAPITAL = &H14

Const VK_ESCAPE = &H1B

Const VK_SPACE = &H20
Const VK_PRIOR = &H21
Const VK_NEXT = &H22
Const VK_END = &H23
Const VK_HOME = &H24
Const VK_LEFT = &H25
Const VK_UP = &H26
Const VK_RIGHT = &H27
Const VK_DOWN = &H28
Const VK_SELECT = &H29
Const VK_PRINT = &H2A
Const VK_EXECUTE = &H2B
Const VK_SNAPSHOT = &H2C
Const VK_INSERT = &H2D
Const VK_DELETE = &H2E
Const VK_HELP = &H2F

' VK_A hasta VK_Z son iguales que sus equivalentes ASCII: 'A' hasta 'Z'
' VK_0 hasta VK_9 son iguales que sus equivalentes en ASCII: '0' hasta '9'

Const VK_NUMPAD0 = &H60
Const VK_NUMPAD1 = &H61
Const VK_NUMPAD2 = &H62
Const VK_NUMPAD3 = &H63
Const VK_NUMPAD4 = &H64
Const VK_NUMPAD5 = &H65
Const VK_NUMPAD6 = &H66
Const VK_NUMPAD7 = &H67
Const VK_NUMPAD8 = &H68
Const VK_NUMPAD9 = &H69
Const VK_MULTIPLY = &H6A
Const VK_ADD = &H6B
Const VK_SEPARATOR = &H6C
Const VK_SUBTRACT = &H6D
Const VK_DECIMAL = &H6E
Const VK_DIVIDE = &H6F
Const VK_F1 = &H70
Const VK_F2 = &H71
Const VK_F3 = &H72
Const VK_F4 = &H73
Const VK_F5 = &H74
Const VK_F6 = &H75
Const VK_F7 = &H76
Const VK_F8 = &H77
Const VK_F9 = &H78
Const VK_F10 = &H79
Const VK_F11 = &H7A
Const VK_F12 = &H7B
Const VK_F13 = &H7C
Const VK_F14 = &H7D
Const VK_F15 = &H7E
Const VK_F16 = &H7F
Const VK_F17 = &H80
Const VK_F18 = &H81
Const VK_F19 = &H82
Const VK_F20 = &H83
Const VK_F21 = &H84
Const VK_F22 = &H85
Const VK_F23 = &H86
Const VK_F24 = &H87

Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91

'
'   VK_L VK_R - teclas virtuales ALT, CTRL y MAYS izquierda y derecha.
'   Se usan slo como parmetros para GetAsyncKeyState() y GetKeyState().
'   Ninguna otra API ni mensaje distingue las teclas derecha e izquierda de esta forma.
'  /
Const VK_LSHIFT = &HA0
Const VK_RSHIFT = &HA1
Const VK_LCONTROL = &HA2
Const VK_RCONTROL = &HA3
Const VK_LMENU = &HA4
Const VK_RMENU = &HA5

Const VK_ATTN = &HF6
Const VK_CRSEL = &HF7
Const VK_EXSEL = &HF8
Const VK_EREOF = &HF9
Const VK_PLAY = &HFA
Const VK_ZOOM = &HFB
Const VK_NONAME = &HFC
Const VK_PA1 = &HFD
Const VK_OEM_CLEAR = &HFE

' Cdigos de SetWindowsHook() 
Const WH_MIN = (-1)
Const WH_MSGFILTER = (-1)
Const WH_JOURNALRECORD = 0
Const WH_JOURNALPLAYBACK = 1
Const WH_KEYBOARD = 2
Const WH_GETMESSAGE = 3
Const WH_CALLWNDPROC = 4
Const WH_CBT = 5
Const WH_SYSMSGFILTER = 6
Const WH_MOUSE = 7
Const WH_HARDWARE = 8
Const WH_DEBUG = 9
Const WH_SHELL = 10
Const WH_FOREGROUNDIDLE = 11
Const WH_MAX = 11

' Cdigos de enlace
Const HC_ACTION = 0
Const HC_GETNEXT = 1
Const HC_SKIP = 2
Const HC_NOREMOVE = 3
Const HC_NOREM = HC_NOREMOVE
Const HC_SYSMODALON = 4
Const HC_SYSMODALOFF = 5

' Cdigos de enlace CBT 
Const HCBT_MOVESIZE = 0
Const HCBT_MINMAX = 1
Const HCBT_QS = 2
Const HCBT_CREATEWND = 3
Const HCBT_DESTROYWND = 4
Const HCBT_ACTIVATE = 5
Const HCBT_CLICKSKIPPED = 6
Const HCBT_KEYSKIPPED = 7
Const HCBT_SYSCOMMAND = 8
Const HCBT_SETFOCUS = 9

' Estructura HCBT_ACTIVATE indicada por lParam
Type CBTACTIVATESTRUCT
        fMouse As Long
        hWndActive As Long
End Type

' Cdigos de procesamiento del filtro WH_MSGFILTER
Const MSGF_DIALOGBOX = 0
Const MSGF_MESSAGEBOX = 1
Const MSGF_MENU = 2
Const MSGF_MOVE = 3
Const MSGF_SIZE = 4
Const MSGF_SCROLLBAR = 5
Const MSGF_NEXTWINDOW = 6
Const MSGF_MAINLOOP = 8
Const MSGF_MAX = 8
Const MSGF_USER = 4096

Const HSHELL_WINDOWCREATED = 1
Const HSHELL_WINDOWDESTROYED = 2
Const HSHELL_ACTIVATESHELLWINDOW = 3

' Estructura de mensajes que se usa en los diarios
Type EVENTMSG
        message As Long
        paramL As Long
        paramH As Long
        time As Long
        hwnd As Long
End Type

Type CWPSTRUCT
        lParam As Long
        wParam As Long
        message As Long
        hwnd As Long
End Type

Type DEBUGHOOKINFO
        hModuleHook As Long
        Reserved As Long
        lParam As Long
        wParam As Long
        code As Long
End Type


Type MOUSEHOOKSTRUCT
        pt As POINTAPI
        hwnd As Long
        wHitTestCode As Long
        dwExtraInfo As Long
End Type

' API de diseo del teclado
Const HKL_PREV = 0
Const HKL_NEXT = 1

Const KLF_ACTIVATE = &H1
Const KLF_SUBSTITUTE_OK = &H2
Const KLF_UNLOADPREVIOUS = &H4
Const KLF_REORDER = &H8

' Tamao de KeyboardLayoutName (nmero de caracteres), incluida la terminacin null
Const KL_NAMELENGTH = 9

Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
Declare Function ActivateKeyboardLayout Lib "user32" Alias "ActivateKeyboardLayout" (ByVal HKL As Long, ByVal flags As Long) As Long
Declare Function UnloadKeyboardLayout Lib "user32" Alias "UnloadKeyboardLayout" (ByVal HKL As Long) As Long
Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long

' Indicadores de acceso especficos del escritorio
Const DESKTOP_READOBJECTS = &H1&
Const DESKTOP_CREATEWINDOW = &H2&
Const DESKTOP_CREATEMENU = &H4&
Const DESKTOP_HOOKCONTROL = &H8&
Const DESKTOP_JOURNALRECORD = &H10&
Const DESKTOP_JOURNALPLAYBACK = &H20&
Const DESKTOP_ENUMERATE = &H40&
Const DESKTOP_WRITEOBJECTS = &H80&

Declare Function GetThreadDesktop Lib "user32" Alias "GetThreadDesktop" (ByVal dwThread As Long) As Long

' Indicadores de acceso especficos de la estacin Windows
Const WINSTA_ENUMDESKTOPS = &H1&
Const WINSTA_READATTRIBUTES = &H2&
Const WINSTA_ACCESSCLIPBOARD = &H4&
Const WINSTA_CREATEDESKTOP = &H8&
Const WINSTA_WRITEATTRIBUTES = &H10&
Const WINSTA_ACCESSPUBLICATOMS = &H20&
Const WINSTA_EXITWINDOWS = &H40&
Const WINSTA_ENUMERATE = &H100&
Const WINSTA_READSCREEN = &H200&

Declare Function GetProcessWindowStation Lib "user32" Alias "GetProcessWindowStation" () As Long
Declare Function SetUserObjectSecurity Lib "user32" Alias "SetUserObjectSecurity" (ByVal hObj As Long, pSIRequested As Long, pSd As SECURITY_DESCRIPTOR) As Long
Declare Function GetUserObjectSecurity Lib "user32" Alias "GetUserObjectSecurity" (ByVal hObj As Long, pSIRequested As Long, pSd As SECURITY_DESCRIPTOR, ByVal nLength As Long, lpnLengthNeeded As Long) As Long

' Estructura de los mensajes

' Desplazamientos de los campos de ventana para GetWindowLong() y GetWindowWord()
Const GWL_WNDPROC = (-4)
Const GWL_HINSTANCE = (-6)
Const GWL_HWNDPARENT = (-8)
Const GWL_STYLE = (-16)
Const GWL_EXSTYLE = (-20)
Const GWL_USERDATA = (-21)
Const GWL_ID = (-12)

' Desplazamientos de los campos de clase para GetClassLong() y GetClassWord()
Const GCL_MENUNAME = (-8)
Const GCL_HBRBACKGROUND = (-10)
Const GCL_HCURSOR = (-12)
Const GCL_HICON = (-14)
Const GCL_HMODULE = (-16)
Const GCL_CBWNDEXTRA = (-18)
Const GCL_CBCLSEXTRA = (-20)
Const GCL_WNDPROC = (-24)
Const GCL_STYLE = (-26)
Const GCW_ATOM = (-32)

' Mensajes de ventana
Const WM_NULL = &H0
Const WM_CREATE = &H1
Const WM_DESTROY = &H2
Const WM_MOVE = &H3
Const WM_SIZE = &H5

Const WM_ACTIVATE = &H6
'
'  Valores de estado de WM_ACTIVATE

Const WA_INACTIVE = 0
Const WA_ACTIVE = 1
Const WA_CLICKACTIVE = 2

Const WM_SETFOCUS = &H7
Const WM_KILLFOCUS = &H8
Const WM_ENABLE = &HA
Const WM_SETREDRAW = &HB
Const WM_SETTEXT = &HC
Const WM_GETTEXT = &HD
Const WM_GETTEXTLENGTH = &HE
Const WM_PAINT = &HF
Const WM_CLOSE = &H10
Const WM_QUERYENDSESSION = &H11
Const WM_QUIT = &H12
Const WM_QUERYOPEN = &H13
Const WM_ERASEBKGND = &H14
Const WM_SYSCOLORCHANGE = &H15
Const WM_ENDSESSION = &H16
Const WM_SHOWWINDOW = &H18
Const WM_WININICHANGE = &H1A
Const WM_DEVMODECHANGE = &H1B
Const WM_ACTIVATEAPP = &H1C
Const WM_FONTCHANGE = &H1D
Const WM_TIMECHANGE = &H1E
Const WM_CANCELMODE = &H1F
Const WM_SETCURSOR = &H20
Const WM_MOUSEACTIVATE = &H21
Const WM_CHILDACTIVATE = &H22
Const WM_QUEUESYNC = &H23

Const WM_GETMINMAXINFO = &H24

Type MINMAXINFO
        ptReserved As POINTAPI
        ptMaxSize As POINTAPI
        ptMaxPosition As POINTAPI
        ptMinTrackSize As POINTAPI
        ptMaxTrackSize As POINTAPI
End Type

Const WM_PAINTICON = &H26
Const WM_ICONERASEBKGND = &H27
Const WM_NEXTDLGCTL = &H28
Const WM_SPOOLERSTATUS = &H2A
Const WM_DRAWITEM = &H2B
Const WM_MEASUREITEM = &H2C
Const WM_DELETEITEM = &H2D
Const WM_VKEYTOITEM = &H2E
Const WM_CHARTOITEM = &H2F
Const WM_SETFONT = &H30
Const WM_GETFONT = &H31
Const WM_SETHOTKEY = &H32
Const WM_GETHOTKEY = &H33
Const WM_QUERYDRAGICON = &H37
Const WM_COMPAREITEM = &H39
Const WM_COMPACTING = &H41
Const WM_OTHERWINDOWCREATED = &H42               '  ya no se admite
Const WM_OTHERWINDOWDESTROYED = &H43             '  ya no se admite
Const WM_COMMNOTIFY = &H44                       '  ya no se admite

' Notificaciones pasadas en palabra baja de lParam en mensajes WM_COMMNOTIFY 
Const CN_RECEIVE = &H1
Const CN_TRANSMIT = &H2
Const CN_EVENT = &H4

Const WM_WINDOWPOSCHANGING = &H46
Const WM_WINDOWPOSCHANGED = &H47

Const WM_POWER = &H48
'
'  wParam para el mensaje de ventana WM_POWER y la notificacin de controlador DRV_POWER

Const PWR_OK = 1
Const PWR_FAIL = (-1)
Const PWR_SUSPENDREQUEST = 1
Const PWR_SUSPENDRESUME = 2
Const PWR_CRITICALRESUME = 3

Const WM_COPYDATA = &H4A
Const WM_CANCELJOURNAL = &H4B

Type COPYDATASTRUCT
        dwData As Long
        cbData As Long
        lpData As Long
End Type

Const WM_NCCREATE = &H81
Const WM_NCDESTROY = &H82
Const WM_NCCALCSIZE = &H83
Const WM_NCHITTEST = &H84
Const WM_NCPAINT = &H85
Const WM_NCACTIVATE = &H86
Const WM_GETDLGCODE = &H87
Const WM_NCMOUSEMOVE = &HA0
Const WM_NCLBUTTONDOWN = &HA1
Const WM_NCLBUTTONUP = &HA2
Const WM_NCLBUTTONDBLCLK = &HA3
Const WM_NCRBUTTONDOWN = &HA4
Const WM_NCRBUTTONUP = &HA5
Const WM_NCRBUTTONDBLCLK = &HA6
Const WM_NCMBUTTONDOWN = &HA7
Const WM_NCMBUTTONUP = &HA8
Const WM_NCMBUTTONDBLCLK = &HA9

Const WM_KEYFIRST = &H100
Const WM_KEYDOWN = &H100
Const WM_KEYUP = &H101
Const WM_CHAR = &H102
Const WM_DEADCHAR = &H103
Const WM_SYSKEYDOWN = &H104
Const WM_SYSKEYUP = &H105
Const WM_SYSCHAR = &H106
Const WM_SYSDEADCHAR = &H107
Const WM_KEYLAST = &H108
Const WM_INITDIALOG = &H110
Const WM_COMMAND = &H111
Const WM_SYSCOMMAND = &H112
Const WM_TIMER = &H113
Const WM_HSCROLL = &H114
Const WM_VSCROLL = &H115
Const WM_INITMENU = &H116
Const WM_INITMENUPOPUP = &H117
Const WM_MENUSELECT = &H11F
Const WM_MENUCHAR = &H120
Const WM_ENTERIDLE = &H121

Const WM_CTLCOLORMSGBOX = &H132
Const WM_CTLCOLOREDIT = &H133
Const WM_CTLCOLORLISTBOX = &H134
Const WM_CTLCOLORBTN = &H135
Const WM_CTLCOLORDLG = &H136
Const WM_CTLCOLORSCROLLBAR = &H137
Const WM_CTLCOLORSTATIC = &H138

Const WM_MOUSEFIRST = &H200
Const WM_MOUSEMOVE = &H200
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202
Const WM_LBUTTONDBLCLK = &H203
Const WM_RBUTTONDOWN = &H204
Const WM_RBUTTONUP = &H205
Const WM_RBUTTONDBLCLK = &H206
Const WM_MBUTTONDOWN = &H207
Const WM_MBUTTONUP = &H208
Const WM_MBUTTONDBLCLK = &H209
Const WM_MOUSELAST = &H209

Const WM_PARENTNOTIFY = &H210
Const WM_ENTERMENULOOP = &H211
Const WM_EXITMENULOOP = &H212
Const WM_MDICREATE = &H220
Const WM_MDIDESTROY = &H221
Const WM_MDIACTIVATE = &H222
Const WM_MDIRESTORE = &H223
Const WM_MDINEXT = &H224
Const WM_MDIMAXIMIZE = &H225
Const WM_MDITILE = &H226
Const WM_MDICASCADE = &H227
Const WM_MDIICONARRANGE = &H228
Const WM_MDIGETACTIVE = &H229
Const WM_MDISETMENU = &H230
Const WM_DROPFILES = &H233
Const WM_MDIREFRESHMENU = &H234


Const WM_CUT = &H300
Const WM_COPY = &H301
Const WM_PASTE = &H302
Const WM_CLEAR = &H303
Const WM_UNDO = &H304
Const WM_RENDERFORMAT = &H305
Const WM_RENDERALLFORMATS = &H306
Const WM_DESTROYCLIPBOARD = &H307
Const WM_DRAWCLIPBOARD = &H308
Const WM_PAINTCLIPBOARD = &H309
Const WM_VSCROLLCLIPBOARD = &H30A
Const WM_SIZECLIPBOARD = &H30B
Const WM_ASKCBFORMATNAME = &H30C
Const WM_CHANGECBCHAIN = &H30D
Const WM_HSCROLLCLIPBOARD = &H30E
Const WM_QUERYNEWPALETTE = &H30F
Const WM_PALETTEISCHANGING = &H310
Const WM_PALETTECHANGED = &H311
Const WM_HOTKEY = &H312

Const WM_PENWINFIRST = &H380
Const WM_PENWINLAST = &H38F

' NOTA: Todos los nmeros de mensajes por debajo de 0x0400 estn RESERVADOS.

' Los mensajes de ventana privados comienzan aqu:
Const WM_USER = &H400

' Comandos de WM_SYNCTASK 
Const ST_BEGINSWP = 0
Const ST_ENDSWP = 1

' Cdigos de posicin del mouse WM_NCHITTEST y MOUSEHOOKSTRUCT 
Const HTERROR = (-2)
Const HTTRANSPARENT = (-1)
Const HTNOWHERE = 0
Const HTCLIENT = 1
Const HTCAPTION = 2
Const HTSYSMENU = 3
Const HTGROWBOX = 4
Const HTSIZE = HTGROWBOX
Const HTMENU = 5
Const HTHSCROLL = 6
Const HTVSCROLL = 7
Const HTMINBUTTON = 8
Const HTMAXBUTTON = 9
Const HTLEFT = 10
Const HTRIGHT = 11
Const HTTOP = 12
Const HTTOPLEFT = 13
Const HTTOPRIGHT = 14
Const HTBOTTOM = 15
Const HTBOTTOMLEFT = 16
Const HTBOTTOMRIGHT = 17
Const HTBORDER = 18
Const HTREDUCE = HTMINBUTTON
Const HTZOOM = HTMAXBUTTON
Const HTSIZEFIRST = HTLEFT
Const HTSIZELAST = HTBOTTOMRIGHT

'  Valores de SendMessageTimeout 
Const SMTO_NORMAL = &H0
Const SMTO_BLOCK = &H1
Const SMTO_ABORTIFHUNG = &H2

' ' Cdigos de retorno de WM_MOUSEACTIVATE 
Const MA_ACTIVATE = 1
Const MA_ACTIVATEANDEAT = 2
Const MA_NOACTIVATE = 3
Const MA_NOACTIVATEANDEAT = 4

Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long

' Valores de wParam del mensaje WM_SIZE
Const SIZE_RESTORED = 0
Const SIZE_MINIMIZED = 1
Const SIZE_MAXIMIZED = 2
Const SIZE_MAXSHOW = 3
Const SIZE_MAXHIDE = 4

' Nombres de constantes obsoletos
Const SIZENORMAL = SIZE_RESTORED
Const SIZEICONIC = SIZE_MINIMIZED
Const SIZEFULLSCREEN = SIZE_MAXIMIZED
Const SIZEZOOMSHOW = SIZE_MAXSHOW
Const SIZEZOOMHIDE = SIZE_MAXHIDE

' Estructura WM_WINDOWPOSCHANGING/CHANGED indicada por lParam
Type WINDOWPOS
        hwnd As Long
        hWndInsertAfter As Long
        x As Long
        y As Long
        cx As Long
        cy As Long
        flags As Long
End Type

' Indicadores de retorno de WM_NCCALCSIZE 
Const WVR_ALIGNTOP = &H10
Const WVR_ALIGNLEFT = &H20
Const WVR_ALIGNBOTTOM = &H40
Const WVR_ALIGNRIGHT = &H80
Const WVR_HREDRAW = &H100
Const WVR_VREDRAW = &H200
Const WVR_REDRAW = (WVR_HREDRAW Or WVR_VREDRAW)
Const WVR_VALIDRECTS = &H400

' Mscaras de estado de las teclas para mensajes del mouse
Const MK_LBUTTON = &H1
Const MK_RBUTTON = &H2
Const MK_SHIFT = &H4
Const MK_CONTROL = &H8
Const MK_MBUTTON = &H10

' Estilos de ventana
Const WS_OVERLAPPED = &H0&
Const WS_POPUP = &H80000000
Const WS_CHILD = &H40000000
Const WS_MINIMIZE = &H20000000
Const WS_VISIBLE = &H10000000
Const WS_DISABLED = &H8000000
Const WS_CLIPSIBLINGS = &H4000000
Const WS_CLIPCHILDREN = &H2000000
Const WS_MAXIMIZE = &H1000000
Const WS_CAPTION = &HC00000                  '  WS_BORDER O WS_DLGFRAME
Const WS_BORDER = &H800000
Const WS_DLGFRAME = &H400000
Const WS_VSCROLL = &H200000
Const WS_HSCROLL = &H100000
Const WS_SYSMENU = &H80000
Const WS_THICKFRAME = &H40000
Const WS_GROUP = &H20000
Const WS_TABSTOP = &H10000

Const WS_MINIMIZEBOX = &H20000
Const WS_MAXIMIZEBOX = &H10000

Const WS_TILED = WS_OVERLAPPED
Const WS_ICONIC = WS_MINIMIZE
Const WS_SIZEBOX = WS_THICKFRAME
Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
Const WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW

'
'   Estilos de ventana comunes
'  /


Const WS_POPUPWINDOW = (WS_POPUP Or WS_BORDER Or WS_SYSMENU)

Const WS_CHILDWINDOW = (WS_CHILD)

' Estilos de ventana ampliada
Const WS_EX_DLGMODALFRAME = &H1&
Const WS_EX_NOPARENTNOTIFY = &H4&
Const WS_EX_TOPMOST = &H8&
Const WS_EX_ACCEPTFILES = &H10&
Const WS_EX_TRANSPARENT = &H20&

' Estilos de clase
Const CS_VREDRAW = &H1
Const CS_HREDRAW = &H2
Const CS_KEYCVTWINDOW = &H4
Const CS_DBLCLKS = &H8
Const CS_OWNDC = &H20
Const CS_CLASSDC = &H40
Const CS_PARENTDC = &H80
Const CS_NOKEYCVT = &H100
Const CS_NOCLOSE = &H200
Const CS_SAVEBITS = &H800
Const CS_BYTEALIGNCLIENT = &H1000
Const CS_BYTEALIGNWINDOW = &H2000
Const CS_PUBLICCLASS = &H4000

' Formatos predefinidos del Portapapeles 
Const CF_TEXT = 1
Const CF_BITMAP = 2
Const CF_METAFILEPICT = 3
Const CF_SYLK = 4
Const CF_DIF = 5
Const CF_TIFF = 6
Const CF_OEMTEXT = 7
Const CF_DIB = 8
Const CF_PALETTE = 9
Const CF_PENDATA = 10
Const CF_RIFF = 11
Const CF_WAVE = 12
Const CF_UNICODETEXT = 13
Const CF_ENHMETAFILE = 14

Const CF_OWNERDISPLAY = &H80
Const CF_DSPTEXT = &H81
Const CF_DSPBITMAP = &H82
Const CF_DSPMETAFILEPICT = &H83
Const CF_DSPENHMETAFILE = &H8E

' Formatos "Private" que no se liberan
Const CF_PRIVATEFIRST = &H200
Const CF_PRIVATELAST = &H2FF

' Formatos de "GDIOBJ" que se eliminan como objetos
Const CF_GDIOBJFIRST = &H300
Const CF_GDIOBJLAST = &H3FF

'  Definiciones para el campo fVirt de la estructura de la tabla Accelerator.
Const FVIRTKEY = True          '  Se supone que est establecido a == TRUE
Const FNOINVERT = &H2
Const FSHIFT = &H4
Const FCONTROL = &H8
Const FALT = &H10

Type ACCEL
        fVirt As Byte
        key As Integer
        cmd As Integer
End Type

Type PAINTSTRUCT
        hdc As Long
        fErase As Long
        rcPaint As Rect
        fRestore As Long
        fIncUpdate As Long
        rgbReserved(32) As Byte
End Type

Type CREATESTRUCT
        lpCreateParams As Long
        hInstance As Long
        hMenu As Long
        hWndParent As Long
        cy As Long
        cx As Long
        y As Long
        x As Long
        style As Long
        lpszName As String
        lpszClass As String
        ExStyle As Long
End Type

' Parmetros HCBT_CREATEWND indicados por lParam
Type CBT_CREATEWND
        lpcs As CREATESTRUCT
        hWndInsertAfter As Long
End Type

Type WINDOWPLACEMENT
        Length As Long
        flags As Long
        showCmd As Long
        ptMinPosition As POINTAPI
        ptMaxPosition As POINTAPI
        rcNormalPosition As Rect
End Type

Const WPF_SETMINPOSITION = &H1
Const WPF_RESTORETOMAXIMIZED = &H2

' Tipos de control de dibujo del propietario
Const ODT_MENU = 1
Const ODT_LISTBOX = 2
Const ODT_COMBOBOX = 3
Const ODT_BUTTON = 4

' Acciones de dibujo del propietario
Const ODA_DRAWENTIRE = &H1
Const ODA_SELECT = &H2
Const ODA_FOCUS = &H4

' Estado de dibujo del propietario
Const ODS_SELECTED = &H1
Const ODS_GRAYED = &H2
Const ODS_DISABLED = &H4
Const ODS_CHECKED = &H8
Const ODS_FOCUS = &H10

' MEASUREITEMSTRUCT para dibujo de propietario
Type MEASUREITEMSTRUCT
        CtlType As Long
        CtlID As Long
        itemID As Long
        itemWidth As Long
        itemHeight As Long
        itemData As Long
End Type

' DRAWITEMSTRUCT para dibujo de propietario
Type DRAWITEMSTRUCT
        CtlType As Long
        CtlID As Long
        itemID As Long
        itemAction As Long
        itemState As Long
        hwndItem As Long
        hdc As Long
        rcItem As Rect
        itemData As Long
End Type

' DELETEITEMSTRUCT para dibujo de propietario
Type DELETEITEMSTRUCT
        CtlType As Long
        CtlID As Long
        itemID As Long
        hwndItem As Long
        itemData As Long
End Type

' COMPAREITEMSTRUCT para el orden del dibujo de propietario
Type COMPAREITEMSTRUCT
        CtlType As Long
        CtlID As Long
        hwndItem As Long
        itemID1 As Long
        itemData1 As Long
        itemID2 As Long
        itemData2 As Long
End Type

' Plantillas de las funciones de mensajes
Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As MSG, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long) As Long
Declare Function TranslateMessage Lib "user32" Alias "TranslateMessage" (lpMsg As MSG) As Long
Declare Function DispatchMessage Lib "user32" Alias "DispatchMessageA" (lpMsg As MSG) As Long
Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As MSG, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long

' Opciones de PeekMessage() 
Const PM_NOREMOVE = &H0
Const PM_REMOVE = &H1
Const PM_NOYIELD = &H2

Declare Function RegisterHotKey Lib "user32" Alias "RegisterHotKey" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Declare Function UnregisterHotKey Lib "user32" Alias "UnregisterHotKey" (ByVal hwnd As Long, ByVal id As Long) As Long

Const MOD_ALT = &H1
Const MOD_CONTROL = &H2
Const MOD_SHIFT = &H4

Const IDHOT_SNAPWINDOW = (-1)    '  SHIFT-PRINTSCRN
Const IDHOT_SNAPDESKTOP = (-2)    '  PRINTSCRN

Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4

Const READAPI = 0        '  Indicadores para _lopen
Const WRITEAPI = 1
Const READ_WRITE = 2

Declare Function ExitWindows Lib "user32" Alias "ExitWindows" (ByVal dwReserved As Long, ByVal uReturnCode As Long) As Long
Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

Declare Function SwapMouseButton Lib "user32" Alias "SwapMouseButton" (ByVal bSwap As Long) As Long
Declare Function GetMessagePos Lib "user32" Alias "GetMessagePos" () As Long
Declare Function GetMessageTime Lib "user32" Alias "GetMessageTime" () As Long
Declare Function GetMessageExtraInfo Lib "user32" Alias "GetMessageExtraInfo" () As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As Long
Declare Function SendNotifyMessage Lib "user32" Alias "SendNotifyMessageA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SendMessageCallback Lib "user32" Alias "SendMessageCallbackA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal lpResultCallBack As Long, ByVal dwData As Long) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function PostThreadMessage Lib "user32" Alias "PostThreadMessageA" (ByVal idThread As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

' Valor de HWND especial para usarlo con PostMessage y SendMessage
Const HWND_BROADCAST = &HFFFF&


Type WNDCLASS
    style As Long
    lpfnwndproc As Long
    cbClsextra As Long
    cbWndExtra2 As Long
    hInstance As Long
    hIcon As Long
    hCursor As Long
    hbrBackground As Long
    lpszMenuName As String
    lpszClassName As String
End Type

Declare Function AttachThreadInput Lib "user32" Alias "AttachThreadInput" (ByVal idAttach As Long, ByVal idAttachTo As Long, ByVal fAttach As Long) As Long
Declare Function ReplyMessage Lib "user32" Alias "ReplyMessage" (ByVal lReply As Long) As Long
Declare Function WaitMessage Lib "user32" Alias "WaitMessage" () As Long
Declare Function WaitForInputIdle Lib "user32" Alias "WaitForInputIdle" (ByVal hProcess As Long, ByVal dwMilliseconds As Long) As Long
Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Sub PostQuitMessage Lib "user32" Alias "PostQuitMessage" (ByVal nExitCode As Long)
Declare Function InSendMessage Lib "user32" Alias "InSendMessage" () As Long

Private Declare Function InitCommonControls Lib "COMCTL32" () As Long
Private Declare Function ImageList_Create Lib "COMCTL32" (ByVal MinCx As Long, ByVal MinCy As Long, ByVal flags As Long, ByVal cInitial As Long, ByVal cGrow As Long) As Long
Private Declare Function ImageList_AddIcon Lib "COMCTL32" (ByVal himl As Long, ByVal hIcon As Long) As Long
Private Declare Function ImageList_GetIcon Lib "COMCTL32" (ByVal HIMAGELIST As Long, ByVal ImgIndex As Long, hbmMask As Long) As Long
Private Declare Function ImageList_Draw Lib "COMCTL32" (ByVal HIMAGELIST As Long, ByVal ImgIndex As Long, ByVal hDCDest As Long, ByVal xDest As Long, ByVal yDest As Long, ByVal lStyle As Long) As Long




Declare Function GetDoubleClickTime Lib "user32" Alias "GetDoubleClickTime" () As Long
Declare Function SetDoubleClickTime Lib "user32" Alias "SetDoubleClickTime" (ByVal wCount As Long) As Long
Declare Function RegisterClass Lib "user32" Alias "RegisterClassA" (Class As WNDCLASS) As Long
Declare Function UnregisterClass Lib "user32" Alias "UnregisterClassA" (ByVal lpClassName As String, ByVal hInstance As Long) As Long
Declare Function GetClassInfo Lib "user32" Alias "GetClassInfoA" (ByVal hInstance As Long, ByVal lpClassName As String, lpWndClass As WNDCLASS) As Long

Const CW_USEDEFAULT = &H80000000
Const HWND_DESKTOP = 0

Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Declare Function IsWindow Lib "user32" Alias "IsWindow" (ByVal hwnd As Long) As Long
Declare Function IsMenu Lib "user32" Alias "IsMenu" (ByVal hMenu As Long) As Long
Declare Function IsChild Lib "user32" Alias "IsChild" (ByVal hWndParent As Long, ByVal hwnd As Long) As Long
Declare Function DestroyWindow Lib "user32" Alias "DestroyWindow" (ByVal hwnd As Long) As Long

Declare Function ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hwnd As Long, ByVal bInvert As Long) As Long
Declare Function ShowOwnedPopups Lib "user32" Alias "ShowOwnedPopups" (ByVal hwnd As Long, ByVal fShow As Long) As Long

Declare Function OpenIcon Lib "user32" Alias "OpenIcon" (ByVal hwnd As Long) As Long
Declare Function CloseWindow Lib "user32" Alias "CloseWindow" (ByVal hwnd As Long) As Long
Declare Function MoveWindow Lib "user32" Alias "MoveWindow" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Declare Function GetWindowPlacement Lib "user32" Alias "GetWindowPlacement" (ByVal hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long
Declare Function SetWindowPlacement Lib "user32" Alias "SetWindowPlacement" (ByVal hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long

Declare Function BeginDeferWindowPos Lib "user32" Alias "BeginDeferWindowPos" (ByVal nNumWindows As Long) As Long
Declare Function DeferWindowPos Lib "user32" Alias "DeferWindowPos" (ByVal hWinPosInfo As Long, ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Declare Function EndDeferWindowPos Lib "user32" Alias "EndDeferWindowPos" (ByVal hWinPosInfo As Long) As Long

Declare Function IsWindowVisible Lib "user32" Alias "IsWindowVisible" (ByVal hwnd As Long) As Long
Declare Function IsIconic Lib "user32" Alias "IsIconic" (ByVal hwnd As Long) As Long
Declare Function AnyPopup Lib "user32" Alias "AnyPopup" () As Long
Declare Function BringWindowToTop Lib "user32" Alias "BringWindowToTop" (ByVal hwnd As Long) As Long
Declare Function IsZoomed Lib "user32" Alias "IsZoomed" (ByVal hwnd As Long) As Long

' Indicadores de SetWindowPos  
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOZORDER = &H4
Const SWP_NOREDRAW = &H8
Const SWP_NOACTIVATE = &H10
Const SWP_FRAMECHANGED = &H20        '  Cambi el marco: enviar WM_NCCALCSIZE
Const SWP_SHOWWINDOW = &H40
Const SWP_HIDEWINDOW = &H80
Const SWP_NOCOPYBITS = &H100
Const SWP_NOOWNERZORDER = &H200      '  No usar el orden Z del propietario

Const SWP_DRAWFRAME = SWP_FRAMECHANGED
Const SWP_NOREPOSITION = SWP_NOOWNERZORDER

' Valores hwndInsertAfter de SetWindowPos()
Const HWND_TOP = 0
Const HWND_BOTTOM = 1
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2

Type DLGTEMPLATE
        style As Long
        dwExtendedStyle As Long
        cdit As Integer
        x As Integer
        y As Integer
        cx As Integer
        cy As Integer
End Type

Type DLGITEMTEMPLATE
        style As Long
        dwExtendedStyle As Long
        x As Integer
        y As Integer
        cx As Integer
        cy As Integer
        id As Integer
End Type

Declare Function EndDialog Lib "user32" Alias "EndDialog" (ByVal hDlg As Long, ByVal nResult As Long) As Long
Declare Function GetDlgItem Lib "user32" Alias "GetDlgItem" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Declare Function SetDlgItemInt Lib "user32" Alias "SetDlgItemInt" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wValue As Long, ByVal bSigned As Long) As Long
Declare Function GetDlgItemInt Lib "user32" Alias "GetDlgItemInt" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpTranslated As Long, ByVal bSigned As Long) As Long
Declare Function SetDlgItemText Lib "user32" Alias "SetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String) As Long
Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Declare Function CheckDlgButton Lib "user32" Alias "CheckDLGButtonA" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long
Declare Function CheckRadioButton Lib "user32" Alias "CheckRadioButtonA" (ByVal hDlg As Long, ByVal nIDFirstButton As Long, ByVal nIDLastButton As Long, ByVal nIDCheckButton As Long) As Long
Declare Function IsDlgButtonChecked Lib "user32" Alias "IsDlgButtonChecked" (ByVal hDlg As Long, ByVal nIDButton As Long) As Long
Declare Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function GetNextDlgGroupItem Lib "user32" Alias "GetNextDlgGroupItem" (ByVal hDlg As Long, ByVal hCtl As Long, ByVal bPrevious As Long) As Long
Declare Function GetNextDlgTabItem Lib "user32" Alias "GetNextDlgTabItem" (ByVal hDlg As Long, ByVal hCtl As Long, ByVal bPrevious As Long) As Long
Declare Function GetDlgCtrlID Lib "user32" Alias "GetDlgCtrlID" (ByVal hwnd As Long) As Long
Declare Function GetDialogBaseUnits Lib "user32" Alias "GetDialogBaseUnits" () As Long
Declare Function DefDlgProc Lib "user32" Alias "DefDlgProcA" (ByVal hDlg As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Const DLGWINDOWEXTRA = 30        '  Bytes extra de ventana necesarios para clases de dilogo privadas

Declare Function CallMsgFilter Lib "user32" Alias "CallMsgFilterA" (lpMsg As MSG, ByVal ncode As Long) As Long

' Funciones del administrador del Portapapeles
Declare Function OpenClipboard Lib "user32" Alias "OpenClipboard" (ByVal hwnd As Long) As Long
Declare Function CloseClipboard Lib "user32" Alias "CloseClipboard" () As Long
Declare Function GetClipboardOwner Lib "user32" Alias "GetClipboardOwner" () As Long
Declare Function SetClipboardViewer Lib "user32" Alias "SetClipboardViewer" (ByVal hwnd As Long) As Long
Declare Function GetClipboardViewer Lib "user32" Alias "GetClipboardViewer" () As Long
Declare Function ChangeClipboardChain Lib "user32" Alias "ChangeClipboardChain" (ByVal hwnd As Long, ByVal hWndNext As Long) As Long
Declare Function SetClipboardData Lib "user32" Alias "SetClipboardDataA" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Declare Function GetClipboardData Lib "user32" Alias "GetClipboardDataA" (ByVal wFormat As Long) As Long
Declare Function RegisterClipboardFormat Lib "user32" Alias "RegisterClipboardFormatA" (ByVal lpString As String) As Long
Declare Function CountClipboardFormats Lib "user32" Alias "CountClipboardFormats" () As Long
Declare Function EnumClipboardFormats Lib "user32" Alias "EnumClipboardFormats" (ByVal wFormat As Long) As Long
Declare Function GetClipboardFormatName Lib "user32" Alias "GetClipboardFormatNameA" (ByVal wFormat As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Declare Function EmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
Declare Function IsClipboardFormatAvailable Lib "user32" Alias "IsClipboardFormatAvailable" (ByVal wFormat As Long) As Long
Declare Function GetPriorityClipboardFormat Lib "user32" Alias "GetPriorityClipboardFormat" (lpPriorityList As Long, ByVal nCount As Long) As Long
Declare Function GetOpenClipboardWindow Lib "user32" Alias "GetOpenClipboardWindow" () As Long
Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Declare Function CharToOemBuff Lib "user32" Alias "CharToOemBuffA" (ByVal lpszSrc As String, ByVal lpszDst As String, ByVal cchDstLength As Long) As Long
Declare Function OemToCharBuff Lib "user32" Alias "OemToCharBuffA" (ByVal lpszSrc As String, ByVal lpszDst As String, ByVal cchDstLength As Long) As Long
Declare Function CharUpper Lib "user32" Alias "CharUpperA" (ByVal lpsz As String) As String
Declare Function CharUpperBuff Lib "user32" Alias "CharUpperBuffA" (ByVal lpsz As String, ByVal cchLength As Long) As Long
Declare Function CharLower Lib "user32" Alias "CharLowerA" (ByVal lpsz As String) As String
Declare Function CharLowerBuff Lib "user32" Alias "CharLowerBuffA" (ByVal lpsz As String, ByVal cchLength As Long) As Long
Declare Function CharNext Lib "user32" Alias "CharNextA" (ByVal lpsz As String) As String
Declare Function CharPrev Lib "user32" Alias "CharPrevA" (ByVal lpszStart As String, ByVal lpszCurrent As String) As String

' Rutinas que dependen del idioma
Declare Function IsCharAlpha Lib "user32" Alias "IsCharAlphaA" (ByVal cChar As Byte) As Long
Declare Function IsCharAlphaNumeric Lib "user32" Alias "IsCharAlphaNumericA" (ByVal cChar As Byte) As Long
Declare Function IsCharUpper Lib "user32" Alias "IsCharUpperA" (ByVal cChar As Byte) As Long
Declare Function IsCharLower Lib "user32" Alias "IsCharLowerA" (ByVal cChar As Byte) As Long

Declare Function SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
Declare Function GetFocus Lib "user32" Alias "GetFocus" () As Long
Declare Function GetActiveWindow Lib "user32" Alias "GetActiveWindow" () As Long

' Rutinas de informacin del teclado
Declare Function GetKBCodePage Lib "user32" Alias "GetKBCodePage" () As Long
Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal nVirtKey As Long) As Integer
Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer
Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (pbKeyState As Byte) As Long
Declare Function SetKeyboardState Lib "user32" Alias "SetKeyboardState" (lppbKeyState As Byte) As Long
Declare Function GetKeyboardType Lib "user32" Alias "GetKeyboardType" (ByVal nTypeFlag As Long) As Long
Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long

Declare Function ToAscii Lib "user32" Alias "ToAscii" (ByVal uVirtKey As Long, ByVal uScanCode As Long, lpbKeyState As Byte, lpwTransKey As Long, ByVal fuState As Long) As Long
Declare Function ToUnicode Lib "user32" Alias "ToUnicode" (ByVal wVirtKey As Long, ByVal wScanCode As Long, lpKeyState As Byte, ByVal pwszBuff As String, ByVal cchBuff As Long, ByVal wFlags As Long) As Long

Declare Function OemKeyScan Lib "user32" Alias "OemKeyScan" (ByVal wOemChar As Long) As Long
Declare Function VkKeyScan Lib "user32" Alias "VkKeyScanA" (ByVal cChar As Byte) As Integer

Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2

Declare Sub keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Const MOUSEEVENTF_MOVE = &H1 '  movimiento del mouse
Const MOUSEEVENTF_LEFTDOWN = &H2 '  botn izquierdo presionado
Const MOUSEEVENTF_LEFTUP = &H4 '  botn izquierdo soltado
Const MOUSEEVENTF_RIGHTDOWN = &H8 '  botn derecho presionado
Const MOUSEEVENTF_RIGHTUP = &H10 '  botn derecho soltado
Const MOUSEEVENTF_MIDDLEDOWN = &H20 '  botn central presionado
Const MOUSEEVENTF_MIDDLEUP = &H40 ' botn central soltado
Const MOUSEEVENTF_ABSOLUTE = &H8000 '  movimiento absoluto

Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

Declare Function GetInputState Lib "user32" Alias "GetInputState" () As Long
Declare Function GetQueueStatus Lib "user32" Alias "GetQueueStatus" (ByVal fuFlags As Long) As Long
Declare Function GetCapture Lib "user32" Alias "GetCapture" () As Long
Declare Function SetCapture Lib "user32" Alias "SetCapture" (ByVal hwnd As Long) As Long
Declare Function ReleaseCapture Lib "user32" Alias "ReleaseCapture" () As Long

Declare Function MsgWaitForMultipleObjects Lib "user32" Alias "MsgWaitForMultipleObjects" (ByVal nCount As Long, pHandles As Long, ByVal fWaitAll As Long, ByVal dwMilliseconds As Long, ByVal dwWakeMask As Long) As Long

' Indicadores de GetQueueStatus 
Const QS_KEY = &H1
Const QS_MOUSEMOVE = &H2
Const QS_MOUSEBUTTON = &H4
Const QS_POSTMESSAGE = &H8
Const QS_TIMER = &H10
Const QS_PAINT = &H20
Const QS_SENDMESSAGE = &H40
Const QS_HOTKEY = &H80

Const QS_MOUSE = (QS_MOUSEMOVE Or QS_MOUSEBUTTON)

Const QS_INPUT = (QS_MOUSE Or QS_KEY)

Const QS_ALLEVENTS = (QS_INPUT Or QS_POSTMESSAGE Or QS_TIMER Or QS_PAINT Or QS_HOTKEY)

Const QS_ALLINPUT = (QS_SENDMESSAGE Or QS_PAINT Or QS_TIMER Or QS_POSTMESSAGE Or QS_MOUSEBUTTON Or QS_MOUSEMOVE Or QS_HOTKEY Or QS_KEY)

' Funciones de Windows
Declare Function KillTimer Lib "user32" Alias "KillTimer" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

Declare Function IsWindowUnicode Lib "user32" Alias "IsWindowUnicode" (ByVal hwnd As Long) As Long

Declare Function EnableWindow Lib "user32" Alias "EnableWindow" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
Declare Function IsWindowEnabled Lib "user32" Alias "IsWindowEnabled" (ByVal hwnd As Long) As Long

Declare Function LoadAccelerators Lib "user32" Alias "LoadAcceleratorsA" (ByVal hInstance As Long, ByVal lpTableName As String) As Long
Declare Function CreateAcceleratorTable Lib "user32" Alias "CreateAcceleratorTableA" (lpaccl As ACCEL, ByVal cEntries As Long) As Long
Declare Function DestroyAcceleratorTable Lib "user32" Alias "DestroyAcceleratorTable" (ByVal haccel As Long) As Long
Declare Function CopyAcceleratorTable Lib "user32" Alias "CopyAcceleratorTableA" (ByVal hAccelSrc As Long, lpAccelDst As ACCEL, ByVal cAccelEntries As Long) As Long
Declare Function TranslateAccelerator Lib "user32" Alias "TranslateAcceleratorA" (ByVal hwnd As Long, ByVal hAccTable As Long, lpMsg As MSG) As Long

' Cdigos de GetSystemMetrics()
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
Const SM_CXVSCROLL = 2
Const SM_CYHSCROLL = 3
Const SM_CYCAPTION = 4
Const SM_CXBORDER = 5
Const SM_CYBORDER = 6
Const SM_CXDLGFRAME = 7
Const SM_CYDLGFRAME = 8
Const SM_CYVTHUMB = 9
Const SM_CXHTHUMB = 10
Const SM_CXICON = 11
Const SM_CYICON = 12
Const SM_CXCURSOR = 13
Const SM_CYCURSOR = 14
Const SM_CYMENU = 15
Const SM_CXFULLSCREEN = 16
Const SM_CYFULLSCREEN = 17
Const SM_CYKANJIWINDOW = 18
Const SM_MOUSEPRESENT = 19
Const SM_CYVSCROLL = 20
Const SM_CXHSCROLL = 21
Const SM_DEBUG = 22
Const SM_SWAPBUTTON = 23
Const SM_RESERVED1 = 24
Const SM_RESERVED2 = 25
Const SM_RESERVED3 = 26
Const SM_RESERVED4 = 27
Const SM_CXMIN = 28
Const SM_CYMIN = 29
Const SM_CXSIZE = 30
Const SM_CYSIZE = 31
Const SM_CXFRAME = 32
Const SM_CYFRAME = 33
Const SM_CXMINTRACK = 34
Const SM_CYMINTRACK = 35
Const SM_CXDOUBLECLK = 36
Const SM_CYDOUBLECLK = 37
Const SM_CXICONSPACING = 38
Const SM_CYICONSPACING = 39
Const SM_MENUDROPALIGNMENT = 40
Const SM_PENWINDOWS = 41
Const SM_DBCSENABLED = 42
Const SM_CMOUSEBUTTONS = 43
Const SM_CMETRICS = 44
Const SM_CXSIZEFRAME = SM_CXFRAME
Const SM_CYSIZEFRAME = SM_CYFRAME
Const SM_CXFIXEDFRAME = SM_CXDLGFRAME 
Const SM_CYFIXEDFRAME = SM_CYDLGFRAME 

Declare Function GetSystemMetrics Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long

Declare Function LoadMenu Lib "user32" Alias "LoadMenuA" (ByVal hInstance As Long, ByVal lpString As String) As Long
Declare Function LoadMenuIndirect Lib "user32" Alias "LoadMenuIndirectA" (ByVal lpMenuTemplate As Long) As Long
Declare Function GetMenu Lib "user32" Alias "GetMenu" (ByVal hwnd As Long) As Long
Declare Function SetMenu Lib "user32" Alias "SetMenu" (ByVal hwnd As Long, ByVal hMenu As Long) As Long
Declare Function HiliteMenuItem Lib "user32" Alias "HiliteMenuItem" (ByVal hwnd As Long, ByVal hMenu As Long, ByVal wIDHiliteItem As Long, ByVal wHilite As Long) As Long
Declare Function GetMenuString Lib "user32" Alias "GetMenuStringA" (ByVal hMenu As Long, ByVal wIDItem As Long, ByVal lpString As String, ByVal nMaxCount As Long, ByVal wFlag As Long) As Long
Declare Function GetMenuState Lib "user32" Alias "GetMenuState" (ByVal hMenu As Long, ByVal wID As Long, ByVal wFlags As Long) As Long
Declare Function DrawMenuBar Lib "user32" Alias "DrawMenuBar" (ByVal hwnd As Long) As Long
Declare Function GetSystemMenu Lib "user32" Alias "GetSystemMenu" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Declare Function CreateMenu Lib "user32" Alias "CreateMenu" () As Long
Declare Function CreatePopupMenu Lib "user32" Alias "CreatePopupMenu" () As Long
Declare Function DestroyMenu Lib "user32" Alias "DestroyMenu" (ByVal hMenu As Long) As Long
Declare Function CheckMenuItem Lib "user32" Alias "CheckMenuItem" (ByVal hMenu As Long, ByVal wIDCheckItem As Long, ByVal wCheck As Long) As Long
Declare Function EnableMenuItem Lib "user32" Alias "EnableMenuItem" (ByVal hMenu As Long, ByVal wIDEnableItem As Long, ByVal wEnable As Long) As Long
Declare Function GetSubMenu Lib "user32" Alias "GetSubMenu" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Declare Function GetMenuItemID Lib "user32" Alias "GetMenuItemID" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Declare Function GetMenuItemCount Lib "user32" Alias "GetMenuItemCount" (ByVal hMenu As Long) As Long

Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As Any) As Long
Declare Function RemoveMenu Lib "user32" Alias "RemoveMenu" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Declare Function DeleteMenu Lib "user32" Alias "DeleteMenu" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Declare Function SetMenuItemBitmaps Lib "user32" Alias "SetMenuItemBitmaps" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long
Declare Function GetMenuCheckMarkDimensions Lib "user32" Alias "GetMenuCheckMarkDimensions" () As Long
Declare Function TrackPopupMenu Lib "user32" Alias "TrackPopupMenu" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, lprc As Rect) As Long

' Indicadores de TrackPopupMenu
Const TPM_LEFTBUTTON = &H0&
Const TPM_RIGHTBUTTON = &H2&
Const TPM_LEFTALIGN = &H0&
Const TPM_CENTERALIGN = &H4&
Const TPM_RIGHTALIGN = &H8&

Declare Function DrawIcon Lib "user32" Alias "DrawIcon" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long

' Indicadores de formato de DrawText()
Const DT_TOP = &H0
Const DT_LEFT = &H0
Const DT_CENTER = &H1
Const DT_RIGHT = &H2
Const DT_VCENTER = &H4
Const DT_BOTTOM = &H8
Const DT_WORDBREAK = &H10
Const DT_SINGLELINE = &H20
Const DT_EXPANDTABS = &H40
Const DT_TABSTOP = &H80
Const DT_NOCLIP = &H100
Const DT_EXTERNALLEADING = &H200
Const DT_CALCRECT = &H400
Const DT_NOPREFIX = &H800
Const DT_INTERNAL = &H1000

Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Declare Function TabbedTextOut Lib "user32" Alias "TabbedTextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long, ByVal nTabPositions As Long, lpnTabStopPositions As Long, ByVal nTabOrigin As Long) As Long
Declare Function GetTabbedTextExtent Lib "user32" Alias "GetTabbedTextExtentA" (ByVal hdc As Long, ByVal lpString As String, ByVal nCount As Long, ByVal nTabPositions As Long, lpnTabStopPositions As Long) As Long

Declare Function UpdateWindow Lib "user32" Alias "UpdateWindow" (ByVal hwnd As Long) As Long
Declare Function SetActiveWindow Lib "user32" Alias "SetActiveWindow" (ByVal hwnd As Long) As Long
Declare Function GetForegroundWindow Lib "user32" Alias "GetForegroundWindow" () As Long
Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long
Declare Function WindowFromDC Lib "user32" Alias "WindowFromDC" (ByVal hdc As Long) As Long

Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long
Declare Function GetDCEx Lib "user32" Alias "GetDCEx" (ByVal hwnd As Long, ByVal hrgnclip As Long, ByVal fdwOptions As Long) As Long

Const DCX_WINDOW = &H1&
Const DCX_CACHE = &H2&
Const DCX_NORESETATTRS = &H4&
Const DCX_CLIPCHILDREN = &H8&
Const DCX_CLIPSIBLINGS = &H10&
Const DCX_PARENTCLIP = &H20&

Const DCX_EXCLUDERGN = &H40&
Const DCX_INTERSECTRGN = &H80&

Const DCX_EXCLUDEUPDATE = &H100&
Const DCX_INTERSECTUPDATE = &H200&

Const DCX_LOCKWINDOWUPDATE = &H400&

Const DCX_NORECOMPUTE = &H100000
Const DCX_VALIDATE = &H200000

Declare Function GetWindowDC Lib "user32" Alias "GetWindowDC" (ByVal hwnd As Long) As Long
Declare Function ReleaseDC Lib "user32" Alias "ReleaseDC" (ByVal hwnd As Long, ByVal hdc As Long) As Long

Declare Function BeginPaint Lib "user32" Alias "BeginPaint" (ByVal hwnd As Long, lpPaint As PAINTSTRUCT) As Long
Declare Function EndPaint Lib "user32" Alias "EndPaint" (ByVal hwnd As Long, lpPaint As PAINTSTRUCT) As Long
Declare Function GetUpdateRect Lib "user32" Alias "GetUpdateRect" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long
Declare Function GetUpdateRgn Lib "user32" Alias "GetUpdateRgn" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal fErase As Long) As Long
Declare Function ExcludeUpdateRgn Lib "user32" Alias "ExcludeUpdateRgn" (ByVal hdc As Long, ByVal hwnd As Long) As Long
Declare Function InvalidateRect Lib "user32" Alias "InvalidateRect" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long
Declare Function ValidateRect Lib "user32" Alias "ValidateRect" (ByVal hwnd As Long, lpRect As RECT) As Long
Declare Function InvalidateRgn Lib "user32" Alias "InvalidateRgn" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bErase As Long) As Long
Declare Function ValidateRgn Lib "user32" Alias "ValidateRgn" (ByVal hwnd As Long, ByVal hRgn As Long) As Long

Declare Function RedrawWindow Lib "user32" Alias "RedrawWindow" (ByVal hwnd As Long, lprcUpdate As RECT, ByVal hrgnUpdate As Long, ByVal fuRedraw As Long) As Long

Const RDW_INVALIDATE = &H1
Const RDW_INTERNALPAINT = &H2
Const RDW_ERASE = &H4

Const RDW_VALIDATE = &H8
Const RDW_NOINTERNALPAINT = &H10
Const RDW_NOERASE = &H20

Const RDW_NOCHILDREN = &H40
Const RDW_ALLCHILDREN = &H80

Const RDW_UPDATENOW = &H100
Const RDW_ERASENOW = &H200

Const RDW_FRAME = &H400
Const RDW_NOFRAME = &H800

Declare Function LockWindowUpdate Lib "user32" Alias "LockWindowUpdate" (ByVal hwndLock As Long) As Long

Declare Function ScrollWindow Lib "user32" Alias "ScrollWindow" (ByVal hWnd As Long, ByVal XAmount As Long, ByVal YAmount As Long, lpRect As RECT, lpClipRect As RECT) As Long
Declare Function ScrollDC Lib "user32" Alias "ScrollDC" (ByVal hdc As Long, ByVal dx As Long, ByVal dy As Long, lprcScroll As RECT, lprcClip As RECT, ByVal hrgnUpdate As Long, lprcUpdate As RECT) As Long
Declare Function ScrollWindowEx Lib "user32" Alias "ScrollWindowEx" (ByVal hwnd As Long, ByVal dx As Long, ByVal dy As Long, lprcScroll As RECT, lprcClip As RECT, ByVal hrgnUpdate As Long, lprcUpdate As RECT, ByVal fuScroll As Long) As Long

Const SW_SCROLLCHILDREN = &H1
Const SW_INVALIDATE = &H2
Const SW_ERASE = &H4

Declare Function SetScrollPos Lib "user32" Alias "SetScrollPos" (ByVal hwnd As Long, ByVal nBar As Long, ByVal nPos As Long, ByVal bRedraw As Long) As Long
Declare Function GetScrollPos Lib "user32" Alias "GetScrollPos" (ByVal hwnd As Long, ByVal nBar As Long) As Long
Declare Function SetScrollRange Lib "user32" Alias "SetScrollRange" (ByVal hwnd As Long, ByVal nBar As Long, ByVal nMinPos As Long, ByVal nMaxPos As Long, ByVal bRedraw As Long) As Long
Declare Function GetScrollRange Lib "user32" Alias "GetScrollRange" (ByVal hwnd As Long, ByVal nBar As Long, lpMinPos As Long, lpMaxPos As Long) As Long
Declare Function ShowScrollBar Lib "user32" Alias "ShowScrollBar" (ByVal hwnd As Long, ByVal wBar As Long, ByVal bShow As Long) As Long
Declare Function EnableScrollBar Lib "user32" Alias "EnableScrollBar" (ByVal hwnd As Long, ByVal wSBflags As Long, ByVal wArrows As Long) As Long

' Indicadores de EnableScrollBar()
Const ESB_ENABLE_BOTH = &H0
Const ESB_DISABLE_BOTH = &H3

Const ESB_DISABLE_LEFT = &H1
Const ESB_DISABLE_RIGHT = &H2

Const ESB_DISABLE_UP = &H1
Const ESB_DISABLE_DOWN = &H2

Const ESB_DISABLE_LTUP = ESB_DISABLE_LEFT
Const ESB_DISABLE_RTDN = ESB_DISABLE_RIGHT

Declare Function SetProp Lib "user32" Alias "SetPropA" (ByVal hwnd As Long, ByVal lpString As String, ByVal hData As Long) As Long
Declare Function GetProp Lib "user32" Alias "GetPropA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Declare Function RemoveProp Lib "user32" Alias "RemovePropA" (ByVal hwnd As Long, ByVal lpString As String) As Long

Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long

Declare Function GetClientRect Lib "user32" Alias "GetClientRect" (ByVal hwnd As Long, lpRect As RECT) As Long
Declare Function GetWindowRect Lib "user32" Alias "GetWindowRect" (ByVal hwnd As Long, lpRect As RECT) As Long
Declare Function AdjustWindowRect Lib "user32" Alias "AdjustWindowRect" (lpRect As RECT, ByVal dwStyle As Long, ByVal bMenu As Long) As Long
Declare Function AdjustWindowRectEx Lib "user32" Alias "AdjustWindowRectEx" (lpRect As RECT, ByVal dsStyle As Long, ByVal bMenu As Long, ByVal dwEsStyle As Long) As Long

' Indicadores de MessageBox() 
Const MB_OK = &H0&
Const MB_OKCANCEL = &H1&
Const MB_ABORTRETRYIGNORE = &H2&
Const MB_YESNOCANCEL = &H3&
Const MB_YESNO = &H4&
Const MB_RETRYCANCEL = &H5&

Const MB_ICONHAND = &H10&
Const MB_ICONQUESTION = &H20&
Const MB_ICONEXCLAMATION = &H30&
Const MB_ICONASTERISK = &H40&

Const MB_ICONINFORMATION = MB_ICONASTERISK
Const MB_ICONSTOP = MB_ICONHAND

Const MB_DEFBUTTON1 = &H0&
Const MB_DEFBUTTON2 = &H100&
Const MB_DEFBUTTON3 = &H200&

Const MB_APPLMODAL = &H0&
Const MB_SYSTEMMODAL = &H1000&
Const MB_TASKMODAL = &H2000&

Const MB_NOFOCUS = &H8000&
Const MB_SETFOREGROUND = &H10000
Const MB_DEFAULT_DESKTOP_ONLY = &H20000

Const MB_TYPEMASK = &HF&
Const MB_ICONMASK = &HF0&
Const MB_DEFMASK = &HF00&
Const MB_MODEMASK = &H3000&
Const MB_MISCMASK = &HC000&

Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Declare Function MessageBoxEx Lib "user32" Alias "MessageBoxExA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long, ByVal wLanguageId As Long) As Long
Declare Function MessageBeep Lib "user32" Alias "MessageBeep" (ByVal wType As Long) As Long

Declare Function ShowCursor Lib "user32" Alias "ShowCursor" (ByVal bShow As Long) As Long
Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal x As Long, ByVal y As Long) As Long
Declare Function SetCursor Lib "user32" Alias "SetCursor" (ByVal hCursor As Long) As Long
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
Declare Function ClipCursor Lib "user32" Alias "ClipCursor" (lpRect As Any) As Long
Declare Function GetCursor Lib "user32" Alias "GetCursor" () As Long
Declare Function GetClipCursor Lib "user32" Alias "GetClipCursor" (lprc As RECT) As Long

Declare Function CreateCaret Lib "user32" Alias "CreateCaret" (ByVal hwnd As Long, ByVal hBitmap As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Declare Function GetCaretBlinkTime Lib "user32" Alias "GetCaretBlinkTime" () As Long
Declare Function SetCaretBlinkTime Lib "user32" Alias "SetCaretBlinkTime" (ByVal wMSeconds As Long) As Long
Declare Function DestroyCaret Lib "user32" Alias "DestroyCaret" () As Long
Declare Function HideCaret Lib "user32" Alias "HideCaret" (ByVal hwnd As Long) As Long
Declare Function ShowCaret Lib "user32" Alias "ShowCaret" (ByVal hwnd As Long) As Long
Declare Function SetCaretPos Lib "user32" Alias "SetCaretPos" (ByVal x As Long, ByVal y As Long) As Long
Declare Function GetCaretPos Lib "user32" Alias "GetCaretPos" (lpPoint As POINTAPI) As Long

Declare Function ClientToScreen Lib "user32" Alias "ClientToScreen" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Declare Function ScreenToClient Lib "user32" Alias "ScreenToClient" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long

Declare Function MapWindowPoints Lib "user32" Alias "MapWindowPoints" (ByVal hwndFrom As Long, ByVal hwndTo As Long, lppt As Any, ByVal cPoints As Long) As Long
Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Declare Function ChildWindowFromPoint Lib "user32" Alias "ChildWindowFromPoint" (ByVal hWnd As Long, ByVal xPoint As Long, ByVal yPoint As Long) As Long

' Tipos de color
Const CTLCOLOR_MSGBOX = 0
Const CTLCOLOR_EDIT = 1
Const CTLCOLOR_LISTBOX = 2
Const CTLCOLOR_BTN = 3
Const CTLCOLOR_DLG = 4
Const CTLCOLOR_SCROLLBAR = 5
Const CTLCOLOR_STATIC = 6
Const CTLCOLOR_MAX = 8   '  tres bits como mximo

Const COLOR_SCROLLBAR = 0
Const COLOR_BACKGROUND = 1
Const COLOR_ACTIVECAPTION = 2
Const COLOR_INACTIVECAPTION = 3
Const COLOR_MENU = 4
Const COLOR_WINDOW = 5
Const COLOR_WINDOWFRAME = 6
Const COLOR_MENUTEXT = 7
Const COLOR_WINDOWTEXT = 8
Const COLOR_CAPTIONTEXT = 9
Const COLOR_ACTIVEBORDER = 10
Const COLOR_INACTIVEBORDER = 11
Const COLOR_APPWORKSPACE = 12
Const COLOR_HIGHLIGHT = 13
Const COLOR_HIGHLIGHTTEXT = 14
Const COLOR_BTNFACE = 15
Const COLOR_BTNSHADOW = 16
Const COLOR_GRAYTEXT = 17
Const COLOR_BTNTEXT = 18
Const COLOR_INACTIVECAPTIONTEXT = 19
Const COLOR_BTNHIGHLIGHT = 20

Declare Function GetSysColor Lib "user32" Alias "GetSysColor" (ByVal nIndex As Long) As Long
Declare Function SetSysColors Lib "user32" Alias "SetSysColors" (ByVal nChanges As Long, lpSysColor As Long, lpColorValues As Long) As Long

Declare Function DrawFocusRect Lib "user32" Alias "DrawFocusRect" (ByVal hdc As Long, lpRect As RECT) As Long
Declare Function FillRect Lib "user32" Alias "FillRect" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Declare Function FrameRect Lib "user32" Alias "FrameRect" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Declare Function InvertRect Lib "user32" Alias "InvertRect" (ByVal hdc As Long, lpRect As RECT) As Long
Declare Function SetRect Lib "user32" Alias "SetRect" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function SetRectEmpty Lib "user32" Alias "SetRectEmpty" (lpRect As RECT) As Long
Declare Function CopyRect Lib "user32" Alias "CopyRect" (lpDestRect As RECT, lpSourceRect As RECT) As Long
Declare Function InflateRect Lib "user32" Alias "InflateRect" (lpRect As RECT, ByVal x As Long, ByVal y As Long) As Long
Declare Function IntersectRect Lib "user32" Alias "IntersectRect" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long
Declare Function UnionRect Lib "user32" Alias "UnionRect" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long
Declare Function SubtractRect Lib "user32" Alias "SubtractRect" (lprcDst As RECT, lprcSrc1 As RECT, lprcSrc2 As RECT) As Long
Declare Function OffsetRect Lib "user32" Alias "OffsetRect" (lpRect As RECT, ByVal x As Long, ByVal y As Long) As Long
Declare Function IsRectEmpty Lib "user32" Alias "IsRectEmpty" (lpRect As RECT) As Long
Declare Function EqualRect Lib "user32" Alias "EqualRect" (lpRect1 As RECT, lpRect2 As RECT) As Long
Declare Function PtInRect Lib "user32" Alias "PtInRect" (lpRect As RECT, pt As POINTAPI) As Long

Declare Function GetWindowWord Lib "user32" Alias "GetWindowWord" (ByVal hwnd As Long, ByVal nIndex As Long) As Integer
Declare Function SetWindowWord Lib "user32" Alias "SetWindowWord" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal wNewWord As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetClassWord Lib "user32" Alias "GetClassWord" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetClassWord Lib "user32" Alias "SetClassWord" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal wNewWord As Long) As Long
Declare Function GetClassLong Lib "user32" Alias "GetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetDesktopWindow Lib "user32" Alias "GetDesktopWindow" () As Long

Declare Function GetParent Lib "user32" Alias "GetParent" (ByVal hwnd As Long) As Long
Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Declare Function GetTopWindow Lib "user32" Alias "GetTopWindow" (ByVal hwnd As Long) As Long
Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long

Declare Function GetWindowThreadProcessId Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hwnd As Long, lpdwProcessId As Long) As Long

Declare Function GetLastActivePopup Lib "user32" Alias "GetLastActivePopup" (ByVal hwndOwnder As Long) As Long

' Constantes de GetWindow() 
Const GW_HWNDFIRST = 0
Const GW_HWNDLAST = 1
Const GW_HWNDNEXT = 2
Const GW_HWNDPREV = 3
Const GW_OWNER = 4
Const GW_CHILD = 5
Const GW_MAX = 5

Declare Function GetWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" Alias "UnhookWindowsHookEx" (ByVal hHook As Long) As Long
Declare Function CallNextHookEx Lib "user32" Alias "CallNextHookEx" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long

' Indicadores de men para Agregar/Verificar/Activar elemento del 
Const MF_INSERT = &H0&
Const MF_CHANGE = &H80&
Const MF_APPEND = &H100&
Const MF_DELETE = &H200&
Const MF_REMOVE = &H1000&

Const MF_BYCOMMAND = &H0&
Const MF_BYPOSITION = &H400&

Const MF_SEPARATOR = &H800&

Const MF_ENABLED = &H0&
Const MF_GRAYED = &H1&
Const MF_DISABLED = &H2&

Const MF_UNCHECKED = &H0&
Const MF_CHECKED = &H8&
Const MF_USECHECKBITMAPS = &H200&

Const MF_STRING = &H0&
Const MF_BITMAP = &H4&
Const MF_OWNERDRAW = &H100&

Const MF_POPUP = &H10&
Const MF_MENUBARBREAK = &H20&
Const MF_MENUBREAK = &H40&

Const MF_UNHILITE = &H0&
Const MF_HILITE = &H80&

Const MF_SYSMENU = &H2000&
Const MF_HELP = &H4000&
Const MF_MOUSESELECT = &H8000&

' Formato de recurso de los elementos de men
Type MENUITEMTEMPLATEHEADER
        versionNumber As Integer
        offset As Integer
End Type

Type MENUITEMTEMPLATE
        mtOption As Integer
        mtID As Integer
        mtString As Byte
End Type

Const MF_END = &H80

' Valores de los comandos de men del sistema


Const SC_SIZE = &HF000&
Const SC_MOVE = &HF010&
Const SC_MINIMIZE = &HF020&
Const SC_MAXIMIZE = &HF030&
Const SC_NEXTWINDOW = &HF040&
Const SC_PREVWINDOW = &HF050&
Const SC_CLOSE = &HF060&
Const SC_VSCROLL = &HF070&
Const SC_HSCROLL = &HF080&
Const SC_MOUSEMENU = &HF090&
Const SC_KEYMENU = &HF100&
Const SC_ARRANGE = &HF110&
Const SC_RESTORE = &HF120&
Const SC_TASKLIST = &HF130&
Const SC_SCREENSAVE = &HF140&
Const SC_HOTKEY = &HF150&

' Nombres obsoletos
Const SC_ICON = SC_MINIMIZE
Const SC_ZOOM = SC_MAXIMIZE

' Rutinas de carga de recursos
Declare Function LoadBitmap Lib "user32" Alias "LoadBitmapA" (ByVal hInstance As Long, ByVal lpBitmapName As String) As Long
Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As String) As Long
Declare Function CreateCursor Lib "user32" Alias "CreateCursor" (ByVal hInstance As Long, ByVal nXhotspot As Long, ByVal nYhotspot As Long, ByVal nWidth As Long, ByVal nHeight As Long, lpANDbitPlane As Any, lpXORbitPlane As Any) As Long
Declare Function DestroyCursor Lib "user32" Alias "DestroyCursor" (ByVal hCursor As Long) As Long
Declare Function CopyCursor Lib "user32" Alias "CopyCursor" (ByVal hcur As Long) As Long

' Id. de los cursores estndar
Const IDC_ARROW = 32512&
Const IDC_IBEAM = 32513&
Const IDC_WAIT = 32514&
Const IDC_CROSS = 32515&
Const IDC_UPARROW = 32516&
Const IDC_SIZE = 32640&
Const IDC_ICON = 32641&
Const IDC_SIZENWSE = 32642&
Const IDC_SIZENESW = 32643&
Const IDC_SIZEWE = 32644&
Const IDC_SIZENS = 32645&
Const IDC_SIZEALL = 32646&
Const IDC_NO = 32648&
Const IDC_APPSTARTING = 32650&

Type ICONINFO
        fIcon As Long
        xHotspot As Long
        yHotspot As Long
        hbmMask As Long
        hbmColor As Long
End Type

Declare Function LoadIcon Lib "user32" Alias "LoadIconA" (ByVal hInstance As Long, ByVal lpIconName As String) As Long
Declare Function CreateIcon Lib "user32" Alias "CreateIcon" (ByVal hInstance As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Byte, ByVal nBitsPixel As Byte, lpANDbits As Byte, lpXORbits As Byte) As Long
Declare Function DestroyIcon Lib "user32" Alias "DestroyIcon" (ByVal hIcon As Long) As Long
Declare Function LookupIconIdFromDirectory Lib "user32" Alias "LookupIconIdFromDirectory" (presbits As Byte, ByVal fIcon As Long) As Long
Declare Function CreateIconIndirect Lib "user32" Alias "CreateIconIndirect" (piconinfo As ICONINFO) As Long
Declare Function CopyIcon Lib "user32" Alias "CopyIcon" (ByVal hIcon As Long) As Long
Declare Function GetIconInfo Lib "user32" Alias "GetIconInfo" (ByVal hIcon As Long, piconinfo As ICONINFO) As Long

' Nmeros ordinales de recurso OEM
Const OBM_CLOSE = 32754
Const OBM_UPARROW = 32753
Const OBM_DNARROW = 32752
Const OBM_RGARROW = 32751
Const OBM_LFARROW = 32750
Const OBM_REDUCE = 32749
Const OBM_ZOOM = 32748
Const OBM_RESTORE = 32747
Const OBM_REDUCED = 32746
Const OBM_ZOOMD = 32745
Const OBM_RESTORED = 32744
Const OBM_UPARROWD = 32743
Const OBM_DNARROWD = 32742
Const OBM_RGARROWD = 32741
Const OBM_LFARROWD = 32740
Const OBM_MNARROW = 32739
Const OBM_COMBO = 32738
Const OBM_UPARROWI = 32737
Const OBM_DNARROWI = 32736
Const OBM_RGARROWI = 32735
Const OBM_LFARROWI = 32734

Const OBM_OLD_CLOSE = 32767
Const OBM_SIZE = 32766
Const OBM_OLD_UPARROW = 32765
Const OBM_OLD_DNARROW = 32764
Const OBM_OLD_RGARROW = 32763
Const OBM_OLD_LFARROW = 32762
Const OBM_BTSIZE = 32761
Const OBM_CHECK = 32760
Const OBM_CHECKBOXES = 32759
Const OBM_BTNCORNERS = 32758
Const OBM_OLD_REDUCE = 32757
Const OBM_OLD_ZOOM = 32756
Const OBM_OLD_RESTORE = 32755

Const OCR_NORMAL = 32512
Const OCR_IBEAM = 32513
Const OCR_WAIT = 32514
Const OCR_CROSS = 32515
Const OCR_UP = 32516
Const OCR_SIZE = 32640
Const OCR_ICON = 32641
Const OCR_SIZENWSE = 32642
Const OCR_SIZENESW = 32643
Const OCR_SIZEWE = 32644
Const OCR_SIZENS = 32645
Const OCR_SIZEALL = 32646
Const OCR_ICOCUR = 32647
Const OCR_NO = 32648 ' no en win3.1

Const OIC_SAMPLE = 32512
Const OIC_HAND = 32513
Const OIC_QUES = 32514
Const OIC_BANG = 32515
Const OIC_NOTE = 32516

Const ORD_LANGDRIVER = 1 '  Nmero ordinal para el punto de entrada de los
                         '  controladores de idioma.

' Id. de los iconos estndar
Const IDI_APPLICATION = 32512&
Const IDI_HAND = 32513&
Const IDI_QUESTION = 32514&
Const IDI_EXCLAMATION = 32515&
Const IDI_ASTERISK = 32516&

Declare Function LoadString Lib "user32" Alias "LoadStringA" (ByVal hInstance As Long, ByVal wID As Long, ByVal lpBuffer As String, ByVal nBufferMax As Long) As Long

' Id. de los comandos de cuadro de dilogo
Const IDOK = 1
Const IDCANCEL = 2
Const IDABORT = 3
Const IDRETRY = 4
Const IDIGNORE = 5
Const IDYES = 6
Const IDNO = 7

' Estructuras y definiciones del administrador de control

' Estilos del control Edit
Const ES_LEFT = &H0&
Const ES_CENTER = &H1&
Const ES_RIGHT = &H2&
Const ES_MULTILINE = &H4&
Const ES_UPPERCASE = &H8&
Const ES_LOWERCASE = &H10&
Const ES_PASSWORD = &H20&
Const ES_AUTOVSCROLL = &H40&
Const ES_AUTOHSCROLL = &H80&
Const ES_NOHIDESEL = &H100&
Const ES_OEMCONVERT = &H400&
Const ES_READONLY = &H800&
Const ES_WANTRETURN = &H1000&

' Cdigos de notificacin del control Edit
Const EN_SETFOCUS = &H100
Const EN_KILLFOCUS = &H200
Const EN_CHANGE = &H300
Const EN_UPDATE = &H400
Const EN_ERRSPACE = &H500
Const EN_MAXTEXT = &H501
Const EN_HSCROLL = &H601
Const EN_VSCROLL = &H602

' Mensajes del control Edit
Const EM_GETSEL = &HB0
Const EM_SETSEL = &HB1
Const EM_GETRECT = &HB2
Const EM_SETRECT = &HB3
Const EM_SETRECTNP = &HB4
Const EM_SCROLL = &HB5
Const EM_LINESCROLL = &HB6
Const EM_SCROLLCARET = &HB7
Const EM_GETMODIFY = &HB8
Const EM_SETMODIFY = &HB9
Const EM_GETLINECOUNT = &HBA
Const EM_LINEINDEX = &HBB
Const EM_SETHANDLE = &HBC
Const EM_GETHANDLE = &HBD
Const EM_GETTHUMB = &HBE
Const EM_LINELENGTH = &HC1
Const EM_REPLACESEL = &HC2
Const EM_GETLINE = &HC4
Const EM_LIMITTEXT = &HC5
Const EM_CANUNDO = &HC6
Const EM_UNDO = &HC7
Const EM_FMTLINES = &HC8
Const EM_LINEFROMCHAR = &HC9
Const EM_SETTABSTOPS = &HCB
Const EM_SETPASSWORDCHAR = &HCC
Const EM_EMPTYUNDOBUFFER = &HCD
Const EM_GETFIRSTVISIBLELINE = &HCE
Const EM_SETREADONLY = &HCF
Const EM_SETWORDBREAKPROC = &HD0
Const EM_GETWORDBREAKPROC = &HD1
Const EM_GETPASSWORDCHAR = &HD2

' Valores del cdigo EDITWORDBREAKPROC
Const WB_LEFT = 0
Const WB_RIGHT = 1
Const WB_ISDELIMITER = 2

' Estilos del control Button
Const BS_PUSHBUTTON = &H0&
Const BS_DEFPUSHBUTTON = &H1&
Const BS_CHECKBOX = &H2&
Const BS_AUTOCHECKBOX = &H3&
Const BS_RADIOBUTTON = &H4&
Const BS_3STATE = &H5&
Const BS_AUTO3STATE = &H6&
Const BS_GROUPBOX = &H7&
Const BS_USERBUTTON = &H8&
Const BS_AUTORADIOBUTTON = &H9&
Const BS_OWNERDRAW = &HB&
Const BS_LEFTTEXT = &H20&

' Cdigos de notificacin del botn de usuario
Const BN_CLICKED = 0
Const BN_PAINT = 1
Const BN_HILITE = 2
Const BN_UNHILITE = 3
Const BN_DISABLE = 4
Const BN_DOUBLECLICKED = 5

' Mensajes del control Button
Const BM_GETCHECK = &HF0
Const BM_SETCHECK = &HF1
Const BM_GETSTATE = &HF2
Const BM_SETSTATE = &HF3
Const BM_SETSTYLE = &HF4

' Constantes del control Static
Const SS_LEFT = &H0&
Const SS_CENTER = &H1&
Const SS_RIGHT = &H2&
Const SS_ICON = &H3&
Const SS_BLACKRECT = &H4&
Const SS_GRAYRECT = &H5&
Const SS_WHITERECT = &H6&
Const SS_BLACKFRAME = &H7&
Const SS_GRAYFRAME = &H8&
Const SS_WHITEFRAME = &H9&
Const SS_USERITEM = &HA&
Const SS_SIMPLE = &HB&
Const SS_LEFTNOWORDWRAP = &HC&
Const SS_NOPREFIX = &H80           '  No convierte el carcter "&"

' Mensajes del control Static
Const STM_SETICON = &H170
Const STM_GETICON = &H171
Const STM_MSGMAX = &H172

Const WC_DIALOG = 8002&

'  Desplazamientos de Get/SetWindowWord/Long para usar con las ventanas WC_DIALOG
Const DWL_MSGRESULT = 0
Const DWL_DLGPROC = 4
Const DWL_USER = 8

' Rutinas del administrador de dilogos
Declare Function IsDialogMessage Lib "user32" Alias "IsDialogMessageA" (ByVal hDlg As Long, lpMsg As MSG) As Long
Declare Function MapDialogRect Lib "user32" Alias "MapDialogRect" (ByVal hDlg As Long, lpRect As RECT) As Long
Declare Function DlgDirList Lib "user32" Alias "DlgDirListA" (ByVal hDlg As Long, ByVal lpPathSpec As String, ByVal nIDListBox As Long, ByVal nIDStaticPath As Long, ByVal wFileType As Long) As Long

' Valores de los indicadores DlgDirList, DlgDirListComboBox
Const DDL_READWRITE = &H0
Const DDL_READONLY = &H1
Const DDL_HIDDEN = &H2
Const DDL_SYSTEM = &H4
Const DDL_DIRECTORY = &H10
Const DDL_ARCHIVE = &H20

Const DDL_POSTMSGS = &H2000
Const DDL_DRIVES = &H4000
Const DDL_EXCLUSIVE = &H8000

Declare Function DlgDirSelectEx Lib "user32" Alias "DlgDirSelectExA" (ByVal hWndDlg As Long, ByVal lpszPath As String, ByVal cbPath As Long, ByVal idListBox As Long) As Long
Declare Function DlgDirListComboBox Lib "user32" Alias "DlgDirListComboBoxA" (ByVal hDlg As Long, ByVal lpPathSpec As String, ByVal nIDComboBox As Long, ByVal nIDStaticPath As Long, ByVal wFileType As Long) As Long
Declare Function DlgDirSelectComboBoxEx Lib "user32" Alias "DlgDirSelectComboBoxExA" (ByVal hWndDlg As Long, ByVal lpszPath As String, ByVal cbPath As Long, ByVal idComboBox As Long) As Long

' Estilos de dilogos
Const DS_ABSALIGN = &H1&
Const DS_SYSMODAL = &H2&
Const DS_LOCALEDIT = &H20          '  Los elementos editados se almacenan localmente.
Const DS_SETFONT = &H40            '  Fuente especificada por el usuario para los controles Dlg
Const DS_MODALFRAME = &H80         '  Se puede combinar con WS_CAPTION
Const DS_NOIDLEMSG = &H100         '  El mensaje WM_ENTERIDLE no se enviar
Const DS_SETFOREGROUND = &H200     '  No est en win3.1

Const DM_GETDEFID = WM_USER + 0
Const DM_SETDEFID = WM_USER + 1
Const DC_HASDEFID = &H534      '0x534B

' Cdigos de dilogo
Const DLGC_WANTARROWS = &H1              '  El control precisa teclas de direccin
Const DLGC_WANTTAB = &H2                 '  El control precisa teclas de tabulacin
Const DLGC_WANTALLKEYS = &H4             '  El control precisa todas las teclas
Const DLGC_WANTMESSAGE = &H4             '  Pasa un mensaje al control
Const DLGC_HASSETSEL = &H8               '  Entiende el mensaje EM_SETSEL
Const DLGC_DEFPUSHBUTTON = &H10          '  Botn de comando predeterminado
Const DLGC_UNDEFPUSHBUTTON = &H20        '  Botn de comando no predeterminado
Const DLGC_RADIOBUTTON = &H40            '  Botn de opcin
Const DLGC_WANTCHARS = &H80              '  Precisa mensajes WM_CHAR
Const DLGC_STATIC = &H100                '  Elemento esttico: no incluir
Const DLGC_BUTTON = &H2000               '  Elemento de botn: se puede activar

Const LB_CTLCODE = 0&

' Valores de retorno del control Listbox
Const LB_OKAY = 0
Const LB_ERR = (-1)
Const LB_ERRSPACE = (-2)

' El parmetro idStaticPath para DlgDirList puede tener los valores siguientes
' con OR si el cuadro de lista tiene que mostrar otros detalles de los archivos
' junto con el nombre de los archivos;
' devolver tambin todos los dems detalles

' Cdigos de notificacin de Listbox
Const LBN_ERRSPACE = (-2)
Const LBN_SELCHANGE = 1
Const LBN_DBLCLK = 2
Const LBN_SELCANCEL = 3
Const LBN_SETFOCUS = 4
Const LBN_KILLFOCUS = 5

' Mensajes del control Listbox
Const LB_ADDSTRING = &H180
Const LB_INSERTSTRING = &H181
Const LB_DELETESTRING = &H182
Const LB_SELITEMRANGEEX = &H183
Const LB_RESETCONTENT = &H184
Const LB_SETSEL = &H185
Const LB_SETCURSEL = &H186
Const LB_GETSEL = &H187
Const LB_GETCURSEL = &H188
Const LB_GETTEXT = &H189
Const LB_GETTEXTLEN = &H18A
Const LB_GETCOUNT = &H18B
Const LB_SELECTSTRING = &H18C
Const LB_DIR = &H18D
Const LB_GETTOPINDEX = &H18E
Const LB_FINDSTRING = &H18F
Const LB_GETSELCOUNT = &H190
Const LB_GETSELITEMS = &H191
Const LB_SETTABSTOPS = &H192
Const LB_GETHORIZONTALEXTENT = &H193
Const LB_SETHORIZONTALEXTENT = &H194
Const LB_SETCOLUMNWIDTH = &H195
Const LB_ADDFILE = &H196
Const LB_SETTOPINDEX = &H197
Const LB_GETITEMRECT = &H198
Const LB_GETITEMDATA = &H199
Const LB_SETITEMDATA = &H19A
Const LB_SELITEMRANGE = &H19B
Const LB_SETANCHORINDEX = &H19C
Const LB_GETANCHORINDEX = &H19D
Const LB_SETCARETINDEX = &H19E
Const LB_GETCARETINDEX = &H19F
Const LB_SETITEMHEIGHT = &H1A0
Const LB_GETITEMHEIGHT = &H1A1
Const LB_FINDSTRINGEXACT = &H1A2
Const LB_SETLOCALE = &H1A5
Const LB_GETLOCALE = &H1A6
Const LB_SETCOUNT = &H1A7
Const LB_MSGMAX = &H1A8

' Estilos de cuadro de lista
Const LBS_NOTIFY = &H1&
Const LBS_SORT = &H2&
Const LBS_NOREDRAW = &H4&
Const LBS_MULTIPLESEL = &H8&
Const LBS_OWNERDRAWFIXED = &H10&
Const LBS_OWNERDRAWVARIABLE = &H20&
Const LBS_HASSTRINGS = &H40&
Const LBS_USETABSTOPS = &H80&
Const LBS_NOINTEGRALHEIGHT = &H100&
Const LBS_MULTICOLUMN = &H200&
Const LBS_WANTKEYBOARDINPUT = &H400&
Const LBS_EXTENDEDSEL = &H800&
Const LBS_DISABLENOSCROLL = &H1000&
Const LBS_NODATA = &H2000&
Const LBS_STANDARD = (LBS_NOTIFY Or LBS_SORT Or WS_VSCROLL Or WS_BORDER)

' Valores de retorno del control ComboBox
Const CB_OKAY = 0
Const CB_ERR = (-1)
Const CB_ERRSPACE = (-2)

' Cdigos de notificacin del control ComboBox
Const CBN_ERRSPACE = (-1)
Const CBN_SELCHANGE = 1
Const CBN_DBLCLK = 2
Const CBN_SETFOCUS = 3
Const CBN_KILLFOCUS = 4
Const CBN_EDITCHANGE = 5
Const CBN_EDITUPDATE = 6
Const CBN_DROPDOWN = 7
Const CBN_CLOSEUP = 8
Const CBN_SELENDOK = 9
Const CBN_SELENDCANCEL = 10

' Estilos del control ComboBox
Const CBS_SIMPLE = &H1&
Const CBS_DROPDOWN = &H2&
Const CBS_DROPDOWNLIST = &H3&
Const CBS_OWNERDRAWFIXED = &H10&
Const CBS_OWNERDRAWVARIABLE = &H20&
Const CBS_AUTOHSCROLL = &H40&
Const CBS_OEMCONVERT = &H80&
Const CBS_SORT = &H100&
Const CBS_HASSTRINGS = &H200&
Const CBS_NOINTEGRALHEIGHT = &H400&
Const CBS_DISABLENOSCROLL = &H800&

' Mensajes del control ComboBox
Const CB_GETEDITSEL = &H140
Const CB_LIMITTEXT = &H141
Const CB_SETEDITSEL = &H142
Const CB_ADDSTRING = &H143
Const CB_DELETESTRING = &H144
Const CB_DIR = &H145
Const CB_GETCOUNT = &H146
Const CB_GETCURSEL = &H147
Const CB_GETLBTEXT = &H148
Const CB_GETLBTEXTLEN = &H149
Const CB_INSERTSTRING = &H14A
Const CB_RESETCONTENT = &H14B
Const CB_FINDSTRING = &H14C
Const CB_SELECTSTRING = &H14D
Const CB_SETCURSEL = &H14E
Const CB_SHOWDROPDOWN = &H14F
Const CB_GETITEMDATA = &H150
Const CB_SETITEMDATA = &H151
Const CB_GETDROPPEDCONTROLRECT = &H152
Const CB_SETITEMHEIGHT = &H153
Const CB_GETITEMHEIGHT = &H154
Const CB_SETEXTENDEDUI = &H155
Const CB_GETEXTENDEDUI = &H156
Const CB_GETDROPPEDSTATE = &H157
Const CB_FINDSTRINGEXACT = &H158
Const CB_SETLOCALE = &H159
Const CB_GETLOCALE = &H15A
Const CB_MSGMAX = &H15B

' Estilos del control ScrollBar
Const SBS_HORZ = &H0&
Const SBS_VERT = &H1&
Const SBS_TOPALIGN = &H2&
Const SBS_LEFTALIGN = &H2&
Const SBS_BOTTOMALIGN = &H4&
Const SBS_RIGHTALIGN = &H4&
Const SBS_SIZEBOXTOPLEFTALIGN = &H2&
Const SBS_SIZEBOXBOTTOMRIGHTALIGN = &H4&
Const SBS_SIZEBOX = &H8&

'  Mensajes del control ScrollBar
Const SBM_SETPOS = &HE0 ' no en win3.1
Const SBM_GETPOS = &HE1 ' no en win3.1
Const SBM_SETRANGE = &HE2 ' no en win3.1
Const SBM_SETRANGEREDRAW = &HE6 ' no en win3.1
Const SBM_GETRANGE = &HE3 ' no en win3.1
Const SBM_ENABLE_ARROWS = &HE4 ' no en win3.1

Const MDIS_ALLCHILDSTYLES = &H1

' Valores de wParam para los mensajes WM_MDITILE y WM_MDICASCADE.
Const MDITILE_VERTICAL = &H0
Const MDITILE_HORIZONTAL = &H1
Const MDITILE_SKIPDISABLED = &H2

Type MDICREATESTRUCT
        szClass As String
        szTitle As String
        hOwner As Long
        x As Long
        y As Long
        cx As Long
        cy As Long
        style As Long
        lParam As Long
End Type

Type CLIENTCREATESTRUCT
        hWindowMenu As Long
        idFirstChild As Long
End Type

Declare Function DefFrameProc Lib "user32" Alias "DefFrameProcA" (ByVal hwnd As Long, ByVal hWndMDIClient As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function DefMDIChildProc Lib "user32" Alias "DefMDIChildProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Declare Function TranslateMDISysAccel Lib "user32" Alias "TranslateMDISysAccel" (ByVal hWndClient As Long, lpMsg As MSG) As Long

Declare Function ArrangeIconicWindows Lib "user32" Alias "ArrangeIconicWindows" (ByVal hwnd As Long) As Long

Declare Function CreateMDIWindow Lib "user32" Alias "CreateMDIWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hInstance As Long, ByVal lParam As Long) As Long

'  Seccin del motor de la Ayuda.

Type MULTIKEYHELP
        mkSize As Long
        mkKeylist As Byte
        szKeyphrase As String * 253 ' La longitud de matriz es arbitraria; se puede cambiar
End Type

Type HELPWININFO
        wStructSize As Long
        x As Long
        y As Long
        dx As Long
        dy As Long
        wMax As Long
        rgchMember As String * 2
End Type

' Comandos para pasar a WinHelp()
Const HELP_CONTEXT = &H1          '  Presenta un tema en ulTopic
Const HELP_QUIT = &H2             '  Termina la ayuda
Const HELP_INDEX = &H3            '  Presenta el ndice
Const HELP_CONTENTS = &H3&
Const HELP_HELPONHELP = &H4       '  Presenta ayuda sobre el uso de la ayuda
Const HELP_SETINDEX = &H5         '  Establece el ndice activo para ayuda de mltiples ndices
Const HELP_SETCONTENTS = &H5&
Const HELP_CONTEXTPOPUP = &H8&
Const HELP_FORCEFILE = &H9&
Const HELP_KEY = &H101            '  Presenta el tema para una palabra clave de offabData
Const HELP_COMMAND = &H102&
Const HELP_PARTIALKEY = &H105&
Const HELP_MULTIKEY = &H201&
Const HELP_SETWINPOS = &H203&

Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd As Long, ByVal lpHelpFile As String, ByVal wCommand As Long, ByVal dwData As Long) As Long

' Parmetro para SystemParametersInfo()
Const SPI_GETBEEP = 1
Const SPI_SETBEEP = 2
Const SPI_GETMOUSE = 3
Const SPI_SETMOUSE = 4
Const SPI_GETBORDER = 5
Const SPI_SETBORDER = 6
Const SPI_GETKEYBOARDSPEED = 10
Const SPI_SETKEYBOARDSPEED = 11
Const SPI_LANGDRIVER = 12
Const SPI_ICONHORIZONTALSPACING = 13
Const SPI_GETSCREENSAVETIMEOUT = 14
Const SPI_SETSCREENSAVETIMEOUT = 15
Const SPI_GETSCREENSAVEACTIVE = 16
Const SPI_SETSCREENSAVEACTIVE = 17
Const SPI_GETGRIDGRANULARITY = 18
Const SPI_SETGRIDGRANULARITY = 19
Const SPI_SETDESKWALLPAPER = 20
Const SPI_SETDESKPATTERN = 21
Const SPI_GETKEYBOARDDELAY = 22
Const SPI_SETKEYBOARDDELAY = 23
Const SPI_ICONVERTICALSPACING = 24
Const SPI_GETICONTITLEWRAP = 25
Const SPI_SETICONTITLEWRAP = 26
Const SPI_GETMENUDROPALIGNMENT = 27
Const SPI_SETMENUDROPALIGNMENT = 28
Const SPI_SETDOUBLECLKWIDTH = 29
Const SPI_SETDOUBLECLKHEIGHT = 30
Const SPI_GETICONTITLELOGFONT = 31
Const SPI_SETDOUBLECLICKTIME = 32
Const SPI_SETMOUSEBUTTONSWAP = 33
Const SPI_SETICONTITLELOGFONT = 34
Const SPI_GETFASTTASKSWITCH = 35
Const SPI_SETFASTTASKSWITCH = 36
Const SPI_SETDRAGFULLWINDOWS = 37
Const SPI_GETDRAGFULLWINDOWS = 38
Const SPI_GETNONCLIENTMETRICS = 41
Const SPI_SETNONCLIENTMETRICS = 42
Const SPI_GETMINIMIZEDMETRICS = 43
Const SPI_SETMINIMIZEDMETRICS = 44
Const SPI_GETICONMETRICS = 45
Const SPI_SETICONMETRICS = 46
Const SPI_SETWORKAREA = 47
Const SPI_GETWORKAREA = 48
Const SPI_SETPENWINDOWS = 49
Const SPI_GETFILTERKEYS = 50
Const SPI_SETFILTERKEYS = 51
Const SPI_GETTOGGLEKEYS = 52
Const SPI_SETTOGGLEKEYS = 53
Const SPI_GETMOUSEKEYS = 54
Const SPI_SETMOUSEKEYS = 55
Const SPI_GETSHOWSOUNDS = 56
Const SPI_SETSHOWSOUNDS = 57
Const SPI_GETSTICKYKEYS = 58
Const SPI_SETSTICKYKEYS = 59
Const SPI_GETACCESSTIMEOUT = 60
Const SPI_SETACCESSTIMEOUT = 61
Const SPI_GETSERIALKEYS = 62
Const SPI_SETSERIALKEYS = 63
Const SPI_GETSOUNDSENTRY = 64
Const SPI_SETSOUNDSENTRY = 65
Const SPI_GETHIGHCONTRAST = 66
Const SPI_SETHIGHCONTRAST = 67
Const SPI_GETKEYBOARDPREF = 68
Const SPI_SETKEYBOARDPREF = 69
Const SPI_GETSCREENREADER = 70
Const SPI_SETSCREENREADER = 71
Const SPI_GETANIMATION = 72
Const SPI_SETANIMATION = 73
Const SPI_GETFONTSMOOTHING = 74
Const SPI_SETFONTSMOOTHING = 75
Const SPI_SETDRAGWIDTH = 76
Const SPI_SETDRAGHEIGHT = 77
Const SPI_SETHANDHELD = 78
Const SPI_GETLOWPOWERTIMEOUT = 79
Const SPI_GETPOWEROFFTIMEOUT = 80
Const SPI_SETLOWPOWERTIMEOUT = 81
Const SPI_SETPOWEROFFTIMEOUT = 82
Const SPI_GETLOWPOWERACTIVE = 83
Const SPI_GETPOWEROFFACTIVE = 84
Const SPI_SETLOWPOWERACTIVE = 85
Const SPI_SETPOWEROFFACTIVE = 86
Const SPI_SETCURSORS = 87
Const SPI_SETICONS = 88
Const SPI_GETDEFAULTINPUTLANG = 89
Const SPI_SETDEFAULTINPUTLANG = 90
Const SPI_SETLANGTOGGLE = 91
Const SPI_GETWINDOWSEXTENSION = 92
Const SPI_SETMOUSETRAILS = 93
Const SPI_GETMOUSETRAILS = 94
Const SPI_SCREENSAVERRUNNING = 97

' Indicadores de SystemParametersInfo 
Const SPIF_UPDATEINIFILE = &H1
Const SPIF_SENDWININICHANGE = &H2

Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long

'  Mensajes de la ventana DDE
Const WM_DDE_FIRST = &H3E0
Const WM_DDE_INITIATE = (WM_DDE_FIRST)
Const WM_DDE_TERMINATE = (WM_DDE_FIRST + 1)
Const WM_DDE_ADVISE = (WM_DDE_FIRST + 2)
Const WM_DDE_UNADVISE = (WM_DDE_FIRST + 3)
Const WM_DDE_ACK = (WM_DDE_FIRST + 4)
Const WM_DDE_DATA = (WM_DDE_FIRST + 5)
Const WM_DDE_REQUEST = (WM_DDE_FIRST + 6)
Const WM_DDE_POKE = (WM_DDE_FIRST + 7)
Const WM_DDE_EXECUTE = (WM_DDE_FIRST + 8)
Const WM_DDE_LAST = (WM_DDE_FIRST + 8)

' *****************************************************************************                                                      *
' * dde.h - Estructuras y definiciones de Intercambio dinmico de datos (DDE)   *
' *                                                                             *
' * Copyright (c) 1993-1995, Microsoft Corp.  Reservados todos los derechos     *
' *                                                                             *
' \*****************************************************************************/


' ----------------------------------------------------------------------------
'        Estructura DDEACK
' 
'         Estructura de of wStatus (LOWORD(lParam)) en el mensaje WM_DDE_ACK
'        que se enva como respuesta a un mensaje WM_DDE_DATA, WM_DDE_REQUEST,
'        WM_DDE_POKE, WM_DDE_ADVISE o WM_DDE_UNADVISE.
' 
' ----------------------------------------------------------------------------*/

Type DDEACK
        bAppReturnCode As Integer
        Reserved As Integer
        fbusy As Integer
        fack As Integer
End Type

' ----------------------------------------------------------------------------
'        Estructura DDEADVISE 
'
'         Estructura del parmetro WM_DDE_ADVISE para hOptions (LOWORD(lParam))
'
' ----------------------------------------------------------------------------*/

Type DDEADVISE
        Reserved As Integer
        fDeferUpd As Integer
        fAckReq As Integer
        cfFormat As Integer
End Type


' ----------------------------------------------------------------------------
'        Estructura DDEDATA 
'
'        Estructura del parmetro WM_DDE_DATA para hData (LOWORD(lParam)).
'        El tamao real de esta estructura depende del tamao de la
'        matriz Value.
'
' ----------------------------------------------------------------------------*/

Type DDEDATA
        unused As Integer
        fresponse As Integer
        fRelease As Integer
        Reserved As Integer
        fAckReq As Integer
        cfFormat As Integer
        Value(1) As Byte
End Type


' ----------------------------------------------------------------------------
'         Estructura DDEPOKE 
'
'         Estructura del parmetro WM_DDE_POKE para hData (LOWORD(lParam)).
'        El tamao real de esta estructura depende del tamao de la
'        matriz Value.
'
' ----------------------------------------------------------------------------*/

Type DDEPOKE
        unused As Integer
        fRelease As Integer
        fReserved As Integer
        cfFormat As Integer
        Value(1) As Byte
End Type

' ----------------------------------------------------------------------------
' Las siguientes definiciones de tipos se han usado en versiones anteriores 
' del SDK de Windows. An son vlidas. Las definiciones de tipos anteriores
' definen exactamente las mismas estructuras que las siguientes. Pero es 
' recomendable usar los nombres de las anteriores porque son ms 
' significativos.

' Observe que la estructura DDEPOKE cuyo tipo estaba definido en versiones
' anteriores de DDE.H, no define correctamente las posiciones de los bits.
' ----------------------------------------------------------------------------*/

Type DDELN
        unused As Integer
        fRelease As Integer
        fDeferUpd As Integer
        fAckReq As Integer
        cfFormat As Integer
End Type

Type DDEUP
        unused As Integer
        fAck As Integer
        fRelease As Integer
        fReserved As Integer
        fAckReq As Integer
        cfFormat As Integer
        rgb(1) As Byte
End Type

Declare Function DdeSetQualityOfService Lib "user32" Alias "DdeSetQualityOfService" (ByVal hWndClient As Long, pqosNew As SECURITY_QUALITY_OF_SERVICE, pqosPrev As SECURITY_QUALITY_OF_SERVICE) As Long
Declare Function ImpersonateDdeClientWindow Lib "user32" Alias "ImpersonateDdeClientWindow" (ByVal hWndClient As Long, ByVal hWndServer As Long) As Long
Declare Function PackDDElParam Lib "user32" Alias "PackDDElParam" (ByVal msg As Long, ByVal uiLo As Long, ByVal uiHi As Long) As Long
Declare Function UnpackDDElParam Lib "user32" Alias "UnpackDDElParam" (ByVal msg As Long, ByVal lParam As Long, puiLo As Long, puiHi As Long) As Long
Declare Function FreeDDElParam Lib "user32" Alias "FreeDDElParam" (ByVal msg As Long, ByVal lParam As Long) As Long
Declare Function ReuseDDElParam Lib "user32" Alias "ReuseDDElParam" (ByVal lParam As Long, ByVal msgIn As Long, ByVal msgOut As Long, ByVal uiLo As Long, ByVal uiHi As Long) As Long

Type HSZPAIR
        hszSvc As Long
        hszTopic As Long
End Type

'//
'// Calidad de servicio
'//

Type SECURITY_QUALITY_OF_SERVICE
    Length As Long
    Impersonationlevel As Integer
    ContextTrackingMode As Integer
    EffectiveOnly As Long
End Type
    
Type CONVCONTEXT
        cb As Long
        wFlags As Long
        wCountryID As Long
        iCodePage As Long
        dwLangID As Long
        dwSecurity As Long
        qos As SECURITY_QUALITY_OF_SERVICE
End Type

Type CONVINFO
        cb As Long
        hUser As Long
        hConvPartner As Long
        hszSvcPartner As Long
        hszServiceReq As Long
        hszTopic As Long
        hszItem As Long
        wFmt As Long
        wType As Long
        wStatus As Long
        wConvst As Long
        wLastError As Long
        hConvList As Long
        ConvCtxt As CONVCONTEXT
        hwnd As Long
        hwndPartner As Long
End Type

'  Estados de conversacin (usState)
Const XST_NULL = 0  '  estados de inmovilidad
Const XST_INCOMPLETE = 1
Const XST_CONNECTED = 2
Const XST_INIT1 = 3  '  estados de medio-iniciacin
Const XST_INIT2 = 4
Const XST_REQSENT = 5  '  estados de conversacin activa
Const XST_DATARCVD = 6
Const XST_POKESENT = 7
Const XST_POKEACKRCVD = 8
Const XST_EXECSENT = 9
Const XST_EXECACKRCVD = 10
Const XST_ADVSENT = 11
Const XST_UNADVSENT = 12
Const XST_ADVACKRCVD = 13
Const XST_UNADVACKRCVD = 14
Const XST_ADVDATASENT = 15
Const XST_ADVDATAACKRCVD = 16

'  se usa en LOWORD(dwData1) de las devoluciones de llamada XTYP_ADVREQ...
Const CADV_LATEACK = &HFFFF

'  Bits de estado de conversacin (fsStatus)
Const ST_CONNECTED = &H1
Const ST_ADVISE = &H2
Const ST_ISLOCAL = &H4
Const ST_BLOCKED = &H8
Const ST_CLIENT = &H10
Const ST_TERMINATED = &H20
Const ST_INLIST = &H40
Const ST_BLOCKNEXT = &H80
Const ST_ISSELF = &H100

'  Constantes DDE para el campo wStatus
Const DDE_FACK = &H8000
Const DDE_FBUSY = &H4000
Const DDE_FDEFERUPD = &H4000
Const DDE_FACKREQ = &H8000
Const DDE_FRELEASE = &H2000
Const DDE_FREQUESTED = &H1000
Const DDE_FAPPSTATUS = &HFF
Const DDE_FNOTPROCESSED = &H0

Const DDE_FACKRESERVED = (Not (DDE_FACK Or DDE_FBUSY Or DDE_FAPPSTATUS))
Const DDE_FADVRESERVED = (Not (DDE_FACKREQ Or DDE_FDEFERUPD))
Const DDE_FDATRESERVED = (Not (DDE_FACKREQ Or DDE_FRELEASE Or DDE_FREQUESTED))
Const DDE_FPOKRESERVED = (Not (DDE_FRELEASE))

'  Tipos de enlace de los filtros de mensajes
Const MSGF_DDEMGR = &H8001

'  Constantes de la pgina de cdigos
Const CP_WINANSI = 1004  '  pgina de cdigos predeterminada para conversaciones DDE antiguas de Windows.
Const CP_WINUNICODE = 1200

'  Tipos de transaccin
Const XTYPF_NOBLOCK = &H2    '  CBR_BLOCK no funcionar
Const XTYPF_NODATA = &H4     '  DDE_FDEFERUPD
Const XTYPF_ACKREQ = &H8     '  DDE_FACKREQ

Const XCLASS_MASK = &HFC00
Const XCLASS_BOOL = &H1000
Const XCLASS_DATA = &H2000
Const XCLASS_FLAGS = &H4000
Const XCLASS_NOTIFICATION = &H8000

Const XTYP_ERROR = (&H0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
Const XTYP_ADVDATA = (&H10 Or XCLASS_FLAGS)
Const XTYP_ADVREQ = (&H20 Or XCLASS_DATA Or XTYPF_NOBLOCK)
Const XTYP_ADVSTART = (&H30 Or XCLASS_BOOL)
Const XTYP_ADVSTOP = (&H40 Or XCLASS_NOTIFICATION)
Const XTYP_EXECUTE = (&H50 Or XCLASS_FLAGS)
Const XTYP_CONNECT = (&H60 Or XCLASS_BOOL Or XTYPF_NOBLOCK)
Const XTYP_CONNECT_CONFIRM = (&H70 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
Const XTYP_XACT_COMPLETE = (&H80 Or XCLASS_NOTIFICATION)
Const XTYP_POKE = (&H90 Or XCLASS_FLAGS) 'GMC-1969 CR
Const XTYP_REGISTER = (&HA0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
Const XTYP_REQUEST = (&HB0 Or XCLASS_DATA)
Const XTYP_DISCONNECT = (&HC0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
Const XTYP_UNREGISTER = (&HD0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
Const XTYP_WILDCONNECT = (&HE0 Or XCLASS_DATA Or XTYPF_NOBLOCK)

Const XTYP_MASK = &HF0
Const XTYP_SHIFT = 4  '  cambia para convertir XTYP_ en un ndice

'  Constantes de tiempo de espera
Const TIMEOUT_ASYNC = &HFFFF

'  Constantes de Id. de transaccin
Const QID_SYNC = &HFFFF

'  Cadenas pblicas que se usan en DDE
Const SZDDESYS_TOPIC = "System"
Const SZDDESYS_ITEM_TOPICS = "Topics"
Const SZDDESYS_ITEM_SYSITEMS = "SysItems"
Const SZDDESYS_ITEM_RTNMSG = "ReturnMessage"
Const SZDDESYS_ITEM_STATUS = "Status"
Const SZDDESYS_ITEM_FORMATS = "Formats"
Const SZDDESYS_ITEM_HELP = "Help"
Const SZDDE_ITEM_ITEMLIST = "TopicItemList"

Const CBR_BLOCK = &HFFFF

' Indicadores de filtro de devolucin de llamada para su uso con aplicaciones estndar.
Const CBF_FAIL_SELFCONNECTIONS = &H1000
Const CBF_FAIL_CONNECTIONS = &H2000
Const CBF_FAIL_ADVISES = &H4000
Const CBF_FAIL_EXECUTES = &H8000
Const CBF_FAIL_POKES = &H10000
Const CBF_FAIL_REQUESTS = &H20000
Const CBF_FAIL_ALLSVRXACTIONS = &H3F000

Const CBF_SKIP_CONNECT_CONFIRMS = &H40000
Const CBF_SKIP_REGISTRATIONS = &H80000
Const CBF_SKIP_UNREGISTRATIONS = &H100000
Const CBF_SKIP_DISCONNECTS = &H200000
Const CBF_SKIP_ALLNOTIFICATIONS = &H3C0000

' Indicadores de comando de aplicacin
Const APPCMD_CLIENTONLY = &H10&
Const APPCMD_FILTERINITS = &H20&
Const APPCMD_MASK = &HFF0&

' Indicadores de clasificacin de aplicacin
Const APPCLASS_STANDARD = &H0&
Const APPCLASS_MASK = &HF&

Declare Function DdeUninitialize Lib "user32" Alias "DdeUninitialize" (ByVal idInst As Long) As Long

' Funciones de enumeracin de conversaciones
Declare Function DdeConnectList Lib "user32" Alias "DdeConnectList" (ByVal idInst As Long, ByVal hszService As Long, ByVal hszTopic As Long, ByVal hConvList As Long, pCC As CONVCONTEXT) As Long
Declare Function DdeQueryNextServer Lib "user32" Alias "DdeQueryNextServer" (ByVal hConvList As Long, ByVal hConvPrev As Long) As Long
Declare Function DdeDisconnectList Lib "user32" Alias "DdeDisconnectList" (ByVal hConvList As Long) As Long

' Funciones de control de conversaciones
Declare Function DdeConnect Lib "user32" Alias "DdeConnect" (ByVal idInst As Long, ByVal hszService As Long, ByVal hszTopic As Long, pCC As CONVCONTEXT) As Long
Declare Function DdeDisconnect Lib "user32" Alias "DdeDisconnect" (ByVal hConv As Long) As Long
Declare Function DdeReconnect Lib "user32" Alias "DdeReconnect" (ByVal hConv As Long) As Long
Declare Function DdeQueryConvInfo Lib "user32" Alias "DdeQueryConvInfo" (ByVal hConv As Long, ByVal idTransaction As Long, pConvInfo As CONVINFO) As Long
Declare Function DdeSetUserHandle Lib "user32" Alias "DdeSetUserHandle" (ByVal hConv As Long, ByVal id As Long, ByVal hUser As Long) As Long
Declare Function DdeAbandonTransaction Lib "user32" Alias "DdeAbandonTransaction" (ByVal idInst As Long, ByVal hConv As Long, ByVal idTransaction As Long) As Long

' Funciones de interfaz del servidor de la aplicacin
Declare Function DdePostAdvise Lib "user32" Alias "DdePostAdvise" (ByVal idInst As Long, ByVal hszTopic As Long, ByVal hszItem As Long) As Long
Declare Function DdeEnableCallback Lib "user32" Alias "DdeEnableCallback" (ByVal idInst As Long, ByVal hConv As Long, ByVal wCmd As Long) As Long
Declare Function DdeImpersonateClient Lib "user32" Alias "DdeImpersonateClient" (ByVal hConv As Long) As Long

Const EC_ENABLEALL = 0
Const EC_ENABLEONE = ST_BLOCKNEXT
Const EC_DISABLE = ST_BLOCKED
Const EC_QUERYWAITING = 2

Declare Function DdeNameService Lib "user32" Alias "DdeNameService" (ByVal idInst As Long, ByVal hsz1 As Long, ByVal hsz2 As Long, ByVal afCmd As Long) As Long

Const DNS_REGISTER = &H1
Const DNS_UNREGISTER = &H2
Const DNS_FILTERON = &H4
Const DNS_FILTEROFF = &H8

' Funciones de interfaz del cliente de las aplicaciones
Declare Function DdeClientTransaction Lib "user32" Alias "DdeClientTransaction" (pData As Byte, ByVal cbData As Long, ByVal hConv As Long, ByVal hszItem As Long, ByVal wFmt As Long, ByVal wType As Long, ByVal dwTimeout As Long, pdwResult As Long) As Long

' Funciones de transferencia de datos
Declare Function DdeCreateDataHandle Lib "user32" Alias "DdeCreateDataHandle" (ByVal idInst As Long, pSrc As Byte, ByVal cb As Long, ByVal cbOff As Long, ByVal hszItem As Long, ByVal wFmt As Long, ByVal afCmd As Long) As Long
Declare Function DdeAddData Lib "user32" Alias "DdeAddDataA" (ByVal hData As Long, pSrc As Byte, ByVal cb As Long, ByVal cbOff As Long) As Long
Declare Function DdeGetData Lib "user32" Alias "DdeGetDataA" (ByVal hData As Long, pDst As Byte, ByVal cbMax As Long, ByVal cbOff As Long) As Long
Declare Function DdeAccessData Lib "user32" Alias "DdeAccessDataA" (ByVal hData As Long, pcbDataSize As Long) As Long
Declare Function DdeUnaccessData Lib "user32" Alias "DdeUnaccessDataA" (ByVal hData As Long) As Long
Declare Function DdeFreeDataHandle Lib "user32" Alias "DdeFreeDataHandle" (ByVal hData As Long) As Long

Const HDATA_APPOWNED = &H1

Declare Function DdeGetLastError Lib "user32" Alias "DdeGetLastError" (ByVal idInst As Long) As Long

Const DMLERR_NO_ERROR = 0                           '  debe ser 0

Const DMLERR_FIRST = &H4000

Const DMLERR_ADVACKTIMEOUT = &H4000
Const DMLERR_BUSY = &H4001
Const DMLERR_DATAACKTIMEOUT = &H4002
Const DMLERR_DLL_NOT_INITIALIZED = &H4003
Const DMLERR_DLL_USAGE = &H4004
Const DMLERR_EXECACKTIMEOUT = &H4005
Const DMLERR_INVALIDPARAMETER = &H4006
Const DMLERR_LOW_MEMORY = &H4007
Const DMLERR_MEMORY_ERROR = &H4008
Const DMLERR_NOTPROCESSED = &H4009
Const DMLERR_NO_CONV_ESTABLISHED = &H400A
Const DMLERR_POKEACKTIMEOUT = &H400B
Const DMLERR_POSTMSG_FAILED = &H400C
Const DMLERR_REENTRANCY = &H400D
Const DMLERR_SERVER_DIED = &H400E
Const DMLERR_SYS_ERROR = &H400F
Const DMLERR_UNADVACKTIMEOUT = &H4010
Const DMLERR_UNFOUND_QUEUE_ID = &H4011

Const DMLERR_LAST = &H4011

Declare Function DdeCreateStringHandle Lib "user32" Alias "DdeCreateStringHandleA" (ByVal idInst As Long, ByVal psz As String, ByVal iCodePage As Long) As Long

Declare Function DdeQueryString Lib "user32" Alias "DdeQueryStringA" (ByVal idInst As Long, ByVal hsz As Long, ByVal psz As String, ByVal cchMax As Long, ByVal iCodePage As Long) As Long

Declare Function DdeFreeStringHandle Lib "user32" Alias "DdeFreeStringHandle" (ByVal idInst As Long, ByVal hsz As Long) As Long
Declare Function DdeKeepStringHandle Lib "user32" Alias "DdeKeepStringHandle" (ByVal idInst As Long, ByVal hsz As Long) As Long
Declare Function DdeCmpStringHandles Lib "user32" Alias "DdeCmpStringHandles" (ByVal hsz1 As Long, ByVal hsz2 As Long) As Long

Type DDEML_MSG_HOOK_DATA    '  nuevo para NT
        uiLo As Long  '  partes altas y bajas no empaquetadas de lParam
        uiHi As Long
        cbData As Long   '  cantidad de datos de un mensaje, si los tiene. Puede ser > 32 bytes.
        Data(8) As Long  '  la consulta rpida de datos por DDESPY est limitada a 32 bytes.
End Type

Type MONMSGSTRUCT
        cb As Long
        hwndTo As Long
        dwTime As Long
        htask As Long
        wMsg As Long
        wParam As Long
        lParam As Long
        dmhd As DDEML_MSG_HOOK_DATA       '  nuevo para NT
End Type

Type MONCBSTRUCT
        cb As Long
        dwTime As Long
        htask As Long
        dwRet As Long
        wType As Long
        wFmt As Long
        hConv As Long
        hsz1 As Long
        hsz2 As Long
        hData As Long
        dwData1 As Long
        dwData2 As Long
        cc As CONVCONTEXT                 '  nuevo para NT para las devoluciones de llamada XTYP_CONNECT 
        cbData As Long                  '  nuevo para NT para la consulta rpida de datos
        Data(8) As Long                 '  nuevo para NT para la consulta rpida de datos
End Type

Type MONHSZSTRUCT
        cb As Long
        fsAction As Long '  Valor de MH_ 
        dwTime As Long
        hsz As Long
        htask As Long
        str As Byte
End Type

Const MH_CREATE = 1
Const MH_KEEP = 2
Const MH_DELETE = 3
Const MH_CLEANUP = 4

Type MONERRSTRUCT
        cb As Long
        wLastError As Long
        dwTime As Long
        htask As Long
End Type

Type MONLINKSTRUCT
        cb As Long
        dwTime As Long
        htask As Long
        fEstablished As Long
        fNoData As Long
        hszSvc As Long
        hszTopic As Long
        hszItem As Long
        wFmt As Long
        fServer As Long
        hConvServer As Long
        hConvClient As Long
End Type

Type MONCONVSTRUCT
        cb As Long
        fConnect As Long
        dwTime As Long
        htask As Long
        hszSvc As Long
        hszTopic As Long
        hConvClient As Long        '  Valor nico global != hConv local de aplicaciones
        hConvServer As Long        '  Valor nico global != hConv local de aplicaciones
End Type

Const MAX_MONITORS = 4
Const APPCLASS_MONITOR = &H1&
Const XTYP_MONITOR = (&HF0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)

' Indicadores de filtro de devolucin de llamada para su uso con aplicaciones de MONITOR - 0 implica que no hay devolucin de llamadas del monitor
Const MF_HSZ_INFO = &H1000000
Const MF_SENDMSGS = &H2000000
Const MF_POSTMSGS = &H4000000
Const MF_CALLBACKS = &H8000000
Const MF_ERRORS = &H10000000
Const MF_LINKS = &H20000000
Const MF_CONV = &H40000000

Const MF_MASK = &HFF000000

' ---------------------------------------------------
' Definiciones de cdigos de error de la API de Win32
' ---------------------------------------------------
' Esta seccin contiene las definiciones de cdigos de error para las funciones de la API de Win32.

' NO_ERROR
Const NO_ERROR = 0 '  dderror

' La operacin de la base de datos del registro de configuracin se ha completado correctamente.
Const ERROR_SUCCESS = 0&

'   Funcin incorrecta.
Const ERROR_INVALID_FUNCTION = 1 '  dderror

'   El sistema no puede encontrar el archivo especificado.
Const ERROR_FILE_NOT_FOUND = 2&

'   El sistema no puede encontrar la ruta de acceso especificada.
Const ERROR_PATH_NOT_FOUND = 3&

'   El sistema no puede abrir el archivo.
Const ERROR_TOO_MANY_OPEN_FILES = 4&

'   Acceso denegado.
Const ERROR_ACCESS_DENIED = 5&

'   El controlador no es vlido.
Const ERROR_INVALID_HANDLE = 6&

'   Se destruyeron los bloques de control de almacenamiento.
Const ERROR_ARENA_TRASHED = 7&

'   No hay espacio suficiente de almacenamiento para procesar este comando.
Const ERROR_NOT_ENOUGH_MEMORY = 8 '  dderror

'   La direccin del bloque de control de almacenamiento no es vlida.
Const ERROR_INVALID_BLOCK = 9&

'   El entorno es incorrecto.
Const ERROR_BAD_ENVIRONMENT = 10&

'   Ha intentado cargar un programa con un
'   formato incorrecto.
Const ERROR_BAD_FORMAT = 11&

'   El cdigo de acceso no es vlido.
Const ERROR_INVALID_ACCESS = 12&

'   Los datos no son vlidos.
Const ERROR_INVALID_DATA = 13&

'   No hay espacio suficiente de almacenamiento para completar la operacin.
Const ERROR_OUTOFMEMORY = 14&

'   El sistema no puede encontrar la unidad especificada.
Const ERROR_INVALID_DRIVE = 15&

'   No se puede quitar el directorio.
Const ERROR_CURRENT_DIRECTORY = 16&

'   El sistema no puede mover el archivo
'   a una unidad de disco diferente.
Const ERROR_NOT_SAME_DEVICE = 17&

'   No hay ms archivos.
Const ERROR_NO_MORE_FILES = 18&

'   El medio est protegido contra escritura.
Const ERROR_WRITE_PROTECT = 19&

'   El sistema no puede encontrar el dispositivo especificado.
Const ERROR_BAD_UNIT = 20&

'   El dispositivo no est listo.
Const ERROR_NOT_READY = 21&

'   El dispositivo no reconoce el comando.
Const ERROR_BAD_COMMAND = 22&

'   Error de datos (comprobacin de redundancia cclica)
Const ERROR_CRC = 23&

'   El programa ha emitido un comando, pero
'   la longitud del comando es incorrecta.
Const ERROR_BAD_LENGTH = 24&

'   La unidad no puede encontrar un rea o una pista
'   especfica en el disco.
Const ERROR_SEEK = 25&

'   No se pudo tener acceso al disco o disquete especificado.
Const ERROR_NOT_DOS_DISK = 26&

'   La unidad no puede encontrar el sector solicitado.
Const ERROR_SECTOR_NOT_FOUND = 27&

'   La impresora se ha quedado sin papel.
Const ERROR_OUT_OF_PAPER = 28&

'   El sistema no puede escribir en el dispositivo especificado.
Const ERROR_WRITE_FAULT = 29&

'   El sistema no puede leer del dispositivo especificado.
Const ERROR_READ_FAULT = 30&

'   Un dispositivo conectado al sistema no funciona.
Const ERROR_GEN_FAILURE = 31&

'   El proceso no puede tener acceso al archivo porque
'   lo est usando otro proceso.
Const ERROR_SHARING_VIOLATION = 32&

'   El proceso no puede tener acceso al archivo porque
'   otro proceso ha bloqueado una parte del archivo.
Const ERROR_LOCK_VIOLATION = 33&

'   El disquete insertado en la unidad es errneo.
'   Inserte %2 (Nmero de serie del volumen: %3)
'   en la unidad %1.
Const ERROR_WRONG_DISK = 34&

'   Hay demasiados archivos abiertos para compartir.
Const ERROR_SHARING_BUFFER_EXCEEDED = 36&

'   Se ha llegado al final del archivo.
Const ERROR_HANDLE_EOF = 38&

'   Disco lleno.
Const ERROR_HANDLE_DISK_FULL = 39&

'   La peticin de red no es compatible.
Const ERROR_NOT_SUPPORTED = 50&

'   El equipo remoto no est disponible.
Const ERROR_REM_NOT_LIST = 51&

'   Existe un nombre duplicado en la red.
Const ERROR_DUP_NAME = 52&

'   No se ha encontrado la ruta de acceso a la red.
Const ERROR_BAD_NETPATH = 53&

'   La red est ocupada.
Const ERROR_NETWORK_BUSY = 54&

'   El recurso o dispositivo de red especificado ya no
'   est disponible.
Const ERROR_DEV_NOT_EXIST = 55 '  dderror

'   Se ha alcanzado el lmite del comando BIOS de la red.
Const ERROR_TOO_MANY_CMDS = 56&

'   Error en el hardware adaptador de red.
Const ERROR_ADAP_HDW_ERR = 57&

'   El servidor especificado no puede efectuar la operacin
'   solicitada.
Const ERROR_BAD_NET_RESP = 58&

'   Error inesperado en la red.
Const ERROR_UNEXP_NET_ERR = 59&

'   El adaptador remoto no es compatible.
Const ERROR_BAD_REM_ADAP = 60&

'   La cola de impresin est llena.
Const ERROR_PRINTQ_FULL = 61&

'   No hay espacio disponible en el servidor para guardar
'   el archivo en espera de imprimir.
Const ERROR_NO_SPOOL_SPACE = 62&

'   Se ha eliminado el archivo que esperaba para imprimir.
Const ERROR_PRINT_CANCELLED = 63&

'   El nombre de red especificado ya no est disponible.
Const ERROR_NETNAME_DELETED = 64&

'   Denegado el acceso a la red.
Const ERROR_NETWORK_ACCESS_DENIED = 65&

'   El tipo de recurso de red no es correcto.
Const ERROR_BAD_DEV_TYPE = 66&

'   No se puede encontrar el nombre de red.
Const ERROR_BAD_NET_NAME = 67&

'   Se ha excedido el lmite de nombres para la tarjeta
'   adaptadora de red del equipo local.
Const ERROR_TOO_MANY_NAMES = 68&

'   Se ha excedido el lmite de sesin BIOS de la red.
Const ERROR_TOO_MANY_SESS = 69&

'   El servidor remoto est en pausa o se est iniciando.
Const ERROR_SHARING_PAUSED = 70&

'   La peticin de red no fue aceptada.
Const ERROR_REQ_NOT_ACCEP = 71&

'   La unidad de disco o la impresora solicitada est en pausa.
Const ERROR_REDIR_PAUSED = 72&

'   El archivo ya existe.
Const ERROR_FILE_EXISTS = 80&

'   Imposible crear el directorio o el archivo.
Const ERROR_CANNOT_MAKE = 82&

'   Fallo en INT 24
Const ERROR_FAIL_I24 = 83&

'   No hay espacio de almacenamiento disponible para
'   procesar esta peticin.
Const ERROR_OUT_OF_STRUCTURES = 84&

'   Ya se est usando el nombre de dispositivo local.
Const ERROR_ALREADY_ASSIGNED = 85&

'   La contrasea de red especificada no es correcta.
Const ERROR_INVALID_PASSWORD = 86&

'   El parmetro es incorrecto.
Const ERROR_INVALID_PARAMETER = 87 '  dderror

'   Error de escritura en la red.
Const ERROR_NET_WRITE_FAULT = 88&

'   El sistema no puede iniciar otro proceso
'   en este momento.
Const ERROR_NO_PROC_SLOTS = 89&

'   Imposible crear otro semforo de sistema.
Const ERROR_TOO_MANY_SEMAPHORES = 100&

'   El semforo exclusivo es propiedad de otro proceso.
Const ERROR_EXCL_SEM_ALREADY_OWNED = 101&

'   El semforo est establecido y no se puede cerrar.
Const ERROR_SEM_IS_SET = 102&

'   No se puede establecer el semforo otra vez.
Const ERROR_TOO_MANY_SEM_REQUESTS = 103&

'   No puede pedir semforos exclusivos en tiempo de interrupcin.
Const ERROR_INVALID_AT_INTERRUPT_TIME = 104&

'   El propietario anterior de este semforo ha terminado de usarlo.
Const ERROR_SEM_OWNER_DIED = 105&

'   Inserte el disco para la unidad %1.
Const ERROR_SEM_USER_LIMIT = 106&

'   El programa se detuvo porque el disquete alternativo no estaba insertado.
Const ERROR_DISK_CHANGE = 107&

'   Otro proceso est usando el disco o lo ha bloqueado.
Const ERROR_DRIVE_LOCKED = 108&

'   La canalizacin ha terminado.
Const ERROR_BROKEN_PIPE = 109&

'   El sistema no puede abrir el
'   dispositivo o archivo especificado.
Const ERROR_OPEN_FAILED = 110&

'   El nombre de archivo es demasiado largo.
Const ERROR_BUFFER_OVERFLOW = 111&

'   No hay espacio suficiente en el disco.
Const ERROR_DISK_FULL = 112&

'   No hay ms identificadores de archivos internos disponibles.
Const ERROR_NO_MORE_SEARCH_HANDLES = 113&

'   El identificador del archivo interno de destino es incorrecto.
Const ERROR_INVALID_TARGET_HANDLE = 114&

'   La llamada IOCTL efectuada por el programa de aplicacin
'   no es correcta.
Const ERROR_INVALID_CATEGORY = 117&

'   El valor del parmetro de opcin comprobar al escribir
'   no es correcto.
Const ERROR_INVALID_VERIFY_SWITCH = 118&

'   El sistema no admite el comando solicitado.
Const ERROR_BAD_DRIVER_LEVEL = 119&

'   Esta funcin slo es vlida en modo de Windows NT.
Const ERROR_CALL_NOT_IMPLEMENTED = 120&

'   Ha terminado el perodo de tiempo de espera del semforo.
Const ERROR_SEM_TIMEOUT = 121&

'   El rea de datos pasada a una llamada de sistema es
'   demasiado pequea.
Const ERROR_INSUFFICIENT_BUFFER = 122 '  dderror

'   La sintaxis del nombre de archivo, del directorio o de la 
'   etiqueta del volumen es incorrecta.
Const ERROR_INVALID_NAME = 123&

'   El nivel de llamada del sistema no es correcto.
Const ERROR_INVALID_LEVEL = 124&

'   El disco no tiene etiqueta de volumen.
Const ERROR_NO_VOLUME_LABEL = 125&

'   No se pudo encontrar el mdulo especificado.
Const ERROR_MOD_NOT_FOUND = 126&

'   No se pudo encontrar el procedimiento especificado.
Const ERROR_PROC_NOT_FOUND = 127&

'   No hay procesos secundarios en espera.
Const ERROR_WAIT_NO_CHILDREN = 128&

'   La aplicacin  %1 no se puede ejecutar en el modo de Windows NT.
Const ERROR_CHILD_NOT_COMPLETE = 129&

'   Se ha intentado usar un controlador de archivos para una particin
'   de disco abierta para una operacin distinta de la E/S de disco.
Const ERROR_DIRECT_ACCESS_HANDLE = 130&

'   Se ha intentado mover el puntero del archivo a un punto anterior al comienzo del archivo.
Const ERROR_NEGATIVE_SEEK = 131&

'   No se pudo establecer el puntero de archivo en el dispositivo o archivo especificado.
Const ERROR_SEEK_ON_DEVICE = 132&

'   No se puede usar un comando JOIN o SUBST
'   para una unidad que contiene unidades
'   combinadas previamente.
Const ERROR_IS_JOIN_TARGET = 133&

'   Se ha intentado usar un comando JOIN o
'   SUBST en una unidad ya combinada.
Const ERROR_IS_JOINED = 134&

'   Se ha intentado usar un comando JOIN o
'   SUBST en una unidad ya sustituida.
Const ERROR_IS_SUBSTED = 135&

'   El sistema ha intentado eliminar el comando JOIN
'   de una unidad que no est combinada.
Const ERROR_NOT_JOINED = 136&

'   El sistema ha intentado eliminar la
'   sustitucin de una unidad que no est sustituida.
Const ERROR_NOT_SUBSTED = 137&

'   El sistema ha intentado combinar una unidad
'   con un directorio en una unidad ya combinada.
Const ERROR_JOIN_TO_JOIN = 138&

'   El sistema ha intentado sustituir una unidad
'   en un directorio de una unidad ya sustituida.
Const ERROR_SUBST_TO_SUBST = 139&

'   El sistema ha intentado combinar una unidad
'   en un directorio de una unidad ya sustituida.
Const ERROR_JOIN_TO_SUBST = 140&

'   El sistema ha intentado sustituir una unidad
'   en un directorio de una unidad combinada.
Const ERROR_SUBST_TO_JOIN = 141&

'   El sistema no puede ejecutar JOIN o SUBST en este momento.
Const ERROR_BUSY_DRIVE = 142&

'   El sistema no puede combinar o sustituir una
'   unidad en o para un directorio de la misma unidad.
Const ERROR_SAME_DRIVE = 143&

'   El directorio no es un subdirectorio del directorio raz.
Const ERROR_DIR_NOT_ROOT = 144&

'   El directorio no est vaco.
Const ERROR_DIR_NOT_EMPTY = 145&

'   La ruta de acceso especificada se est usando
'   en un substituto.
Const ERROR_IS_SUBST_PATH = 146&

'   No hay suficientes recursos disponibles para
'   procesar este comando.
Const ERROR_IS_JOIN_PATH = 147&

'   La ruta de acceso especificada no se puede usar en este momento.
Const ERROR_PATH_BUSY = 148&

'   Se ha intentado combinar o sustituir
'   una unidad para la que hay un
'   directorio en la unidad que es el
'   destino de un sustituto anterior.
Const ERROR_IS_SUBST_TARGET = 149&

'   No est especificada la informacin de seguimiento
'   del sistema en el archivo CONFIG.SYS,
'   o no est permitido el seguimiento.
Const ERROR_SYSTEM_TRACE = 150&

'   El nmero de eventos de semforo especificados para
'   DosMuxSemWait no es correcto.
Const ERROR_INVALID_EVENT_COUNT = 151&

'   DosMuxSemWait no se ha ejecutado; hay demasiados
'   semforos establecidos.
Const ERROR_TOO_MANY_MUXWAITERS = 152&

'   La lista DosMuxSemWait no es correcta.
Const ERROR_INVALID_LIST_FORMAT = 153&

'   La etiqueta del volumen especificada supera el lmite de
'   11 caracteres. Los 11 primeros caracteres se escribieron
'   en disco. Los caracteres restantes, que superan el lmite
'   de 11, se eliminaron automticamente.
Const ERROR_LABEL_TOO_LONG = 154&

'   Imposible crear otro subproceso.
Const ERROR_TOO_MANY_TCBS = 155&

'   El proceso receptor ha rechazado la seal.
Const ERROR_SIGNAL_REFUSED = 156&

'   El segmento ya est descartado y no se puede bloquear.
Const ERROR_DISCARDED = 157&

'   El segmento ya est desbloqueado.
Const ERROR_NOT_LOCKED = 158&

'   La direccin para el Id. de subproceso no es correcta.
Const ERROR_BAD_THREADID_ADDR = 159&

'   La cadena de argumento pasada a DosExecPgm no es correcta.
Const ERROR_BAD_ARGUMENTS = 160&

'   La ruta de acceso especificada no es vlida.
Const ERROR_BAD_PATHNAME = 161&

'   Ya hay una seal pendiente.
Const ERROR_SIGNAL_PENDING = 162&

'   No se pueden crear ms subprocesos en el sistema.
Const ERROR_MAX_THRDS_REACHED = 164&

'   Imposible bloquear una regin de un archivo.
Const ERROR_LOCK_FAILED = 167&

'   El recurso solicitado est en uso.
Const ERROR_BUSY = 170&

'   No haba una solicitud de bloqueo pendiente para la regin de cancelacin dada.
Const ERROR_CANCEL_VIOLATION = 173&

'   El sistema de archivos no admite cambios individuales en el tipo de bloqueo.
Const ERROR_ATOMIC_LOCKS_NOT_SUPPORTED = 174&

'   El sistema detect un nmero de segmento incorrecto.
Const ERROR_INVALID_SEGMENT_NUMBER = 180&

'   El sistema operativo no puede ejecutar %1.
Const ERROR_INVALID_ORDINAL = 182&

'   Imposible crear un archivo que ya existe.
Const ERROR_ALREADY_EXISTS = 183&

'   El indicador pasado no es correcto.
Const ERROR_INVALID_FLAG_NUMBER = 186&

'   No se ha encontrado el nombre especificado de semforo del sistema.	
Const ERROR_SEM_NOT_FOUND = 187&

'   El sistema operativo no puede ejecutar %1.
Const ERROR_INVALID_STARTING_CODESEG = 188&

'   El sistema operativo no puede ejecutar %1.
Const ERROR_INVALID_STACKSEG = 189&

'   El sistema operativo no puede ejecutar %1.
Const ERROR_INVALID_MODULETYPE = 190&

'   Imposible ejecutar %1 en modo de Windows NT.
Const ERROR_INVALID_EXE_SIGNATURE = 191&

'   El sistema operativo no puede ejecutar %1.
Const ERROR_EXE_MARKED_INVALID = 192&

'   %1 no es una aplicacin vlida de Windows NT.
Const ERROR_BAD_EXE_FORMAT = 193&

'   El sistema operativo no puede ejecutar %1.
Const ERROR_ITERATED_DATA_EXCEEDS_64k = 194&

'   El sistema operativo no puede ejecutar %1.
Const ERROR_INVALID_MINALLOCSIZE = 195&

'   El sistema operativo no puede ejecutar
'   este programa de aplicacin.
Const ERROR_DYNLINK_FROM_INVALID_RING = 196&

'   El sistema operativo no est configurado
'   actualmente para ejecutar esta aplicacin.
Const ERROR_IOPL_NOT_ENABLED = 197&

'   El sistema operativo no puede ejecutar %1.
Const ERROR_INVALID_SEGDPL = 198&

'   El sistema operativo no puede ejecutar
'   este programa de aplicacin.
Const ERROR_AUTODATASEG_EXCEEDS_64k = 199&

'   El segmento de cdigo no puede ser mayor o igual que 64 KB.
Const ERROR_RING2SEG_MUST_BE_MOVABLE = 200&

'   El sistema operativo no puede ejecutar %1.
Const ERROR_RELOC_CHAIN_XEEDS_SEGLIM = 201&

'   El sistema operativo no puede ejecutar %1.
Const ERROR_INFLOOP_IN_RELOC_CHAIN = 202&

'   El sistema no pudo encontrar la opcin de
'   entorno especificada.
Const ERROR_ENVVAR_NOT_FOUND = 203&

'   Ningn proceso del subrbol de comandos tiene
'   controlador de seales.
Const ERROR_NO_SIGNAL_SENT = 205&

'   El nombre de archivo o la extensin son demasiado largos.
Const ERROR_FILENAME_EXCED_RANGE = 206&

'   La pila de llamada 2 ya est en uso.
Const ERROR_RING2_STACK_IN_USE = 207&

'   Se han especificado caracteres de nombre de archivo global o ?
'   incorrectamente o se han especificado demasiados caracteres
'   de nombre de archivo global.
Const ERROR_META_EXPANSION_TOO_LONG = 208&

'   La seal que se est enviando no es correcta.
Const ERROR_INVALID_SIGNAL_NUMBER = 209&

'   Imposible establecer el controlador de seal.
Const ERROR_THREAD_1_INACTIVE = 210&

'   El segmento est bloqueado y no se puede volver a asignar.
Const ERROR_LOCKED = 212&

'   Hay demasiados mdulos de vnculos dinmicos adjuntos
'   a este programa o mdulo de vnculos dinmicos.
Const ERROR_TOO_MANY_MODULES = 214&

'   Imposible anidar llamadas para LoadModule.
Const ERROR_NESTING_NOT_ALLOWED = 215&

'   El estado de canalizacin no es vlido.
Const ERROR_BAD_PIPE = 230&

'   Todas las instancias de canalizacin estn ocupadas.
Const ERROR_PIPE_BUSY = 231&

'   Se est cerrando la canalizacin.
Const ERROR_NO_DATA = 232&

'   No hay ningn proceso en el otro extremo de la canalizacin.
Const ERROR_PIPE_NOT_CONNECTED = 233&

'   Hay ms datos disponibles.
Const ERROR_MORE_DATA = 234 '  dderror

'   Se cancel la sesin.
Const ERROR_VC_DISCONNECTED = 240&

'   El nombre de atributo ampliado especificado no era vlido.
Const ERROR_INVALID_EA_NAME = 254&

'   Los atributos ampliados no son coherentes.
Const ERROR_EA_LIST_INCONSISTENT = 255&

'   No hay ms datos disponibles.
Const ERROR_NO_MORE_ITEMS = 259&

'   No se puede usar la API de copia.
Const ERROR_CANNOT_COPY = 266&

'   El nombre de directorio no es vlido.
Const ERROR_DIRECTORY = 267&

'   Los atributos ampliados no caben en el bfer.
Const ERROR_EAS_DIDNT_FIT = 275&

'   El archivo de atributos ampliado del sistema de archivos
'   montado est daado.
Const ERROR_EA_FILE_CORRUPT = 276&

'   El archivo de tabla de atributos ampliado est lleno.
Const ERROR_EA_TABLE_FULL = 277&

'   El controlador especificado para el atributo ampliado no es vlido.
Const ERROR_INVALID_EA_HANDLE = 278&

'   El sistema de archivos montado no admite atributos ampliados.
Const ERROR_EAS_NOT_SUPPORTED = 282&

'   El intento de liberar mutex no pertenece al que llama.
Const ERROR_NOT_OWNER = 288&

'   Se han efectuado demasiados envos a un semforo.
Const ERROR_TOO_MANY_POSTS = 298&

'   El sistema no puede encontrar el mensaje
'   correspondiente al nmero 0x%1 en el archivo de mensajes para %2.
Const ERROR_MR_MID_NOT_FOUND = 317&

'   Intento de tener acceso a una direccin no vlida.
Const ERROR_INVALID_ADDRESS = 487&

'   El resultado aritmtico super los 32 bits.
Const ERROR_ARITHMETIC_OVERFLOW = 534&

'   Hay un proceso al otro extremo de la canalizacin.
Const ERROR_PIPE_CONNECTED = 535&

'   Esperando a que un proceso abra el otro extremo de la canalizacin.
Const ERROR_PIPE_LISTENING = 536&

'   Acceso denegado al atributo ampliado.
Const ERROR_EA_ACCESS_DENIED = 994&

'   Se ha interrumpido la operacin de E/S a causa de una salida del
'   subproceso o de una peticin de la aplicacin.
Const ERROR_OPERATION_ABORTED = 995&

'   El evento de E/S superpuesto no est en el estado sealado.
Const ERROR_IO_INCOMPLETE = 996&

'   La operacin de E/S superpuesta est en ejecucin.
Const ERROR_IO_PENDING = 997 '  dderror

'   Acceso no vlido a la ubicacin de memoria.
Const ERROR_NOACCESS = 998&

'   Error al efectuar la operacin inpage.
Const ERROR_SWAPERROR = 999&

'   Recursividad demasiado profunda; se ha desbordado la pila.
Const ERROR_STACK_OVERFLOW = 1001&

'   La ventana no puede actuar sobre el mensaje enviado.
Const ERROR_INVALID_MESSAGE = 1002&

'   Imposible completar esta funcin.
Const ERROR_CAN_NOT_COMPLETE = 1003&

'   Indicadores no vlidos.
Const ERROR_INVALID_FLAGS = 1004&

'   El volumen no contiene un sistema de archivos reconocido.
'   Asegrese de que estn cargados todos los controladores necesarios
'   del sistema de archivos y de que el volumen no est daado.
Const ERROR_UNRECOGNIZED_VOLUME = 1005&

'   El volumen para un archivo se ha modificado externamente;
'   por eso el archivo abierto ya no es vlido.
Const ERROR_FILE_INVALID = 1006&

'   Imposible realizar la operacin solicitada en modo de pantalla completa.
Const ERROR_FULLSCREEN_MODE = 1007&

'   Se intent hacer referencia a un smbolo que no existe.
Const ERROR_NO_TOKEN = 1008&

'   La base de datos del registro de configuracin est daada.
Const ERROR_BADDB = 1009&

'   La clave del registro de configuracin no es vlida.
Const ERROR_BADKEY = 1010&

'   No se pudo abrir la clave del registro de configuracin.
Const ERROR_CANTOPEN = 1011&

'   No se pudo leer la clave del registro de configuracin.
Const ERROR_CANTREAD = 1012&

'   No se pudo escribir la clave del registro de configuracin.
Const ERROR_CANTWRITE = 1013&

'   Se ha tenido que recuperar uno de los archivos de la base de 
'   datos del Registro usando un registro o una copia alternativa.
'   La recuperacin se ha efectuado sin problemas.
Const ERROR_REGISTRY_RECOVERED = 1014&

'   El Registro est daado. La estructura de uno de los archivos que
'   contiene datos del Registro est daada, la imagen del sistema
'   del archivo en memoria est daada o no se pudo recuperar el
'   archivo porque la copia alternativa o el registro no estaba presente
'   o estaba daado.
Const ERROR_REGISTRY_CORRUPT = 1015&

'   Ha fallado de forma irrecuperable una operacin de E/S iniciada por
'   el Registro. El Registro no ha podido leer, escribir o vaciar
'   uno de los archivos que contienen la imagen del sistema del Registro.
Const ERROR_REGISTRY_IO_FAILED = 1016&

'   El sistema ha intentado cargar o restaurar un archivo en el Registro,
'   pero el archivo especificado no tiene formato de archivo de registro.
Const ERROR_NOT_REGISTRY_FILE = 1017&

'   Se ha intentado efectuar una operacin no permitida en una clave
'   del Registro marcada para su eliminacin.
Const ERROR_KEY_DELETED = 1018&

'   El sistema no pudo asignar el espacio requerido en un archivo 
'   de Registro.
Const ERROR_NO_LOG_SPACE = 1019&

'   Imposible e crear un vnculo simblico en una clave de Registro
'   que ya tiene subclaves o valores.
Const ERROR_KEY_HAS_CHILDREN = 1020&

'   Imposible crear una subclave estable bajo una clave primaria voltil.
Const ERROR_CHILD_MUST_BE_VOLATILE = 1021&

'   Se est terminando una peticin de cambio de notificacin y el bfer
'   del que llama no devuelve la informacin. El que llama tiene que
'   enumerar ahora los archivos para encontrar los cambios.
Const ERROR_NOTIFY_ENUM_DIR = 1022&

'   Se ha enviado un control de parada a un servicio del que dependen
'   otros servicios en ejecucin.
Const ERROR_DEPENDENT_SERVICES_RUNNING = 1051&

'   El control solicitado no es vlido para este servicio.
Const ERROR_INVALID_SERVICE_CONTROL = 1052&

'   El servicio no ha respondido a la peticin de control o inicio en el
'   tiempo apropiado.
Const ERROR_SERVICE_REQUEST_TIMEOUT = 1053&

'   Imposible crear un subproceso para el servicio.
Const ERROR_SERVICE_NO_THREAD = 1054&

'   La base de datos del servicio est bloqueada.
Const ERROR_SERVICE_DATABASE_LOCKED = 1055&

'   Ya se est ejecutando una instancia del servicio.
Const ERROR_SERVICE_ALREADY_RUNNING = 1056&

'   El nombre de cuenta no es vlido o no existe.
Const ERROR_INVALID_SERVICE_ACCOUNT = 1057&

'   El servicio especificado est desactivado y no se puede iniciar.
Const ERROR_SERVICE_DISABLED = 1058&

'   Se ha especificado una dependencia de servicio circular.
Const ERROR_CIRCULAR_DEPENDENCY = 1059&

'   El servicio especificado no existe como servicio instalado.
Const ERROR_SERVICE_DOES_NOT_EXIST = 1060&

'   El servicio no puede aceptar mensajes de control en este momento.
Const ERROR_SERVICE_CANNOT_ACCEPT_CTRL = 1061&

'   El servicio no se ha iniciado.
Const ERROR_SERVICE_NOT_ACTIVE = 1062&

'   El proceso de servicio no se pudo conectar con el controlador de servicio.
Const ERROR_FAILED_SERVICE_CONTROLLER_CONNECT = 1063&

'   Se ha producido una excepcin en el servicio al tratar la peticin del control.
Const ERROR_EXCEPTION_IN_SERVICE = 1064&

'   La base de datos especificada no existe.
Const ERROR_DATABASE_DOES_NOT_EXIST = 1065&

'   El servicio ha devuelto un cdigo de error especfico del servicio.
Const ERROR_SERVICE_SPECIFIC_ERROR = 1066&

'   El proceso termin inesperadamente.
Const ERROR_PROCESS_ABORTED = 1067&

'   No se ha iniciado el servicio o grupo de dependencia.
Const ERROR_SERVICE_DEPENDENCY_FAIL = 1068&

'   El servicio no se ha iniciado debido a un fallo de inicio de sesin.
Const ERROR_SERVICE_LOGON_FAILED = 1069&

'   Despus de iniciarse, el servicio qued bloqueado en estado pendiente 
'   de inicio.
Const ERROR_SERVICE_START_HANG = 1070&

'   El bloqueo de base de datos del servicio especificado no es vlido.
Const ERROR_INVALID_SERVICE_LOCK = 1071&

'   El servicio especificado est marcado para eliminacin.
Const ERROR_SERVICE_MARKED_FOR_DELETE = 1072&

'   El servicio especificado ya existe.
Const ERROR_SERVICE_EXISTS = 1073&

'   El sistema se est ejecutando actualmente con la ltima configuracin vlida conocida.
Const ERROR_ALREADY_RUNNING_LKG = 1074&

'   El servicio de dependencia no existe o est marcado
'   para eliminacin.
Const ERROR_SERVICE_DEPENDENCY_DELETED = 1075&

'   Ya se ha aceptado el uso de la inicializacin actual
'   como mejor conjunto de controles conocido.
Const ERROR_BOOT_ALREADY_ACCEPTED = 1076&

'   No se ha intentado iniciar el servicio ninguna vez desde la ltima inicializacin.
Const ERROR_SERVICE_NEVER_STARTED = 1077&

'   Ya se est usando el nombre como nombre de servicio o
'   de pantalla de servicio.
Const ERROR_DUPLICATE_SERVICE_NAME = 1078&

'   Se ha llegado al final fsico de la cinta.
Const ERROR_END_OF_MEDIA = 1100&

'   Un acceso de cinta ha alcanzado una marca de archivo.
Const ERROR_FILEMARK_DETECTED = 1101&

'   Se encontr el comienzo de la cinta o particin.
Const ERROR_BEGINNING_OF_MEDIA = 1102&

'   Un acceso de cinta ha llegado al final del conjunto de archivos.
Const ERROR_SETMARK_DETECTED = 1103&

'   No hay ms datos en esta cinta.
Const ERROR_NO_DATA_DETECTED = 1104&

'   Imposible hacer particiones en la cinta.
Const ERROR_PARTITION_FAILURE = 1105&

'   Cuando se est teniendo acceso a una cinta nueva de una particin 
'   multivolumen, el tamao de bloque activo es incorrecto.
Const ERROR_INVALID_BLOCK_LENGTH = 1106&

'   No se puede encontrar la informacin de particin de cinta
'   al cargar una cinta.
Const ERROR_DEVICE_NOT_PARTITIONED = 1107&

'   Imposible bloquear el mecanismo para expulsar el medio.
Const ERROR_UNABLE_TO_LOCK_MEDIA = 1108&

'   Imposible descargar el medio.
Const ERROR_UNABLE_TO_UNLOAD_MEDIA = 1109&

'   Puede que se haya cambiado el medio que est en la unidad.
Const ERROR_MEDIA_CHANGED = 1110&

'   Se restableci el bus de E/S.
Const ERROR_BUS_RESET = 1111&

'   No hay ningn medio en la unidad.
Const ERROR_NO_MEDIA_IN_DRIVE = 1112&

'   No existe ninguna asignacin para el carcter Unicode en la
'   pgina de cdigos multibyte de destino.
Const ERROR_NO_UNICODE_TRANSLATION = 1113&

'   Ha fallado la rutina de inicializacin de una biblioteca 
'   de vnculos dinmicos (DLL).
Const ERROR_DLL_INIT_FAILED = 1114&

'   Se est efectuando un cierre del sistema.
Const ERROR_SHUTDOWN_IN_PROGRESS = 1115&

'   Imposible anular el cierre del sistema porque no se estaba 
'   efectuando ningn cierre.
Const ERROR_NO_SHUTDOWN_IN_PROGRESS = 1116&

'   No se pudo efectuar la peticin a causa de un error en el dispositivo de E/S.
Const ERROR_IO_DEVICE = 1117&

'   No se ha inicializado correctamente ningn dispositivo serie.
'   Se descargar el controlador serie.
Const ERROR_SERIAL_NO_DEVICE = 1118&

'   Imposible abrir un dispositivo que comparta una peticin de interrupcin (IRQ)
'   con otros dispositivos. Al menos uno de los otros dispositivos que usa dicho IRQ
'   ya estaba abierto.
Const ERROR_IRQ_BUSY = 1119&

'   Se ha terminado una operacin de E/S serie escribiendo otra vez en el puerto serie.
'   (El contador IOCTL_SERIAL_XOFF_COUNTER ha llegado a cero.)
Const ERROR_MORE_WRITES = 1120&

'   Se ha terminado una operacin de E/S serie porque ha expirado el tiempo de espera.
'   (El contador IOCTL_SERIAL_XOFF_COUNTER no ha llegado a cero.)
Const ERROR_COUNTER_TIMEOUT = 1121&

'   No se ha encontrado la marca de direccin de Id. en el disquete.
Const ERROR_FLOPPY_ID_MARK_NOT_FOUND = 1122&

'   No coincide el campo de Id. de sector de disquete con la direccin
'   de pista del controlador del disquete.
Const ERROR_FLOPPY_WRONG_CYLINDER = 1123&

'   El controlador del disquete ha informado de un error no
'   reconocido por la unidad de disquete.
Const ERROR_FLOPPY_UNKNOWN_ERROR = 1124&

'   El controlador del disquete devolvi resultados incoherentes en sus registros.
Const ERROR_FLOPPY_BAD_REGISTERS = 1125&

'   Mientras se tena acceso al disco duro, fall una operacin de recalibrado, 
'   incluso despus de varios intentos.
Const ERROR_DISK_RECALIBRATE_FAILED = 1126&

'   Mientras se tena acceso al disco duro, fall una operacin de disco,
'   incluso despus de varios intentos.
Const ERROR_DISK_OPERATION_FAILED = 1127&

'   Mientras se tena acceso al disco duro, fue necesario reiniciar el 
'   controlador de disco, pero tambin ha fallado.
Const ERROR_DISK_RESET_FAILED = 1128&

'   Se encontr el final fsico de la cinta.
Const ERROR_EOM_OVERFLOW = 1129&

'   No hay espacio de almacenamiento suficiente en el servidor para procesar este comando.
Const ERROR_NOT_ENOUGH_SERVER_MEMORY = 1130&

'   Se ha detectado una posible condicin de conflicto.
Const ERROR_POSSIBLE_DEADLOCK = 1131&

'   La direccin de base o el desplazamiento de archivo especificados no
'   tienen la alineacin apropiada.
Const ERROR_MAPPED_ALIGNMENT = 1132&

' NUEVO para Win32
Const ERROR_INVALID_PIXEL_FORMAT = 2000
Const ERROR_BAD_DRIVER = 2001
Const ERROR_INVALID_WINDOW_STYLE = 2002
Const ERROR_METAFILE_NOT_SUPPORTED = 2003
Const ERROR_TRANSFORM_NOT_SUPPORTED = 2004
Const ERROR_CLIPPING_NOT_SUPPORTED = 2005
Const ERROR_UNKNOWN_PRINT_MONITOR = 3000
Const ERROR_PRINTER_DRIVER_IN_USE = 3001
Const ERROR_SPOOL_FILE_NOT_FOUND = 3002
Const ERROR_SPL_NO_STARTDOC = 3003
Const ERROR_SPL_NO_ADDJOB = 3004
Const ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED = 3005
Const ERROR_PRINT_MONITOR_ALREADY_INSTALLED = 3006
Const ERROR_WINS_INTERNAL = 4000
Const ERROR_CAN_NOT_DEL_LOCAL_WINS = 4001
Const ERROR_STATIC_INIT = 4002
Const ERROR_INC_BACKUP = 4003
Const ERROR_FULL_BACKUP = 4004
Const ERROR_REC_NON_EXISTENT = 4005
Const ERROR_RPL_NOT_ALLOWED = 4006
Const SEVERITY_SUCCESS = 0
Const SEVERITY_ERROR = 1
Const FACILITY_NT_BIT = &H10000000
Const NOERROR = 0
Const E_UNEXPECTED = &H8000FFFF
Const E_NOTIMPL = &H80004001
Const E_OUTOFMEMORY = &H8007000E
Const E_INVALIDARG = &H80070057
Const E_NOINTERFACE = &H80004002
Const E_POINTER = &H80004003
Const E_HANDLE = &H80070006
Const E_ABORT = &H80004004
Const E_FAIL = &H80004005
Const E_ACCESSDENIED = &H80070005
Const CO_E_INIT_TLS = &H80004006
Const CO_E_INIT_SHARED_ALLOCATOR = &H80004007
Const CO_E_INIT_MEMORY_ALLOCATOR = &H80004008
Const CO_E_INIT_CLASS_CACHE = &H80004009
Const CO_E_INIT_RPC_CHANNEL = &H8000400A
Const CO_E_INIT_TLS_SET_CHANNEL_CONTROL = &H8000400B
Const CO_E_INIT_TLS_CHANNEL_CONTROL = &H8000400C
Const CO_E_INIT_UNACCEPTED_USER_ALLOCATOR = &H8000400D
Const CO_E_INIT_SCM_MUTEX_EXISTS = &H8000400E
Const CO_E_INIT_SCM_FILE_MAPPING_EXISTS = &H8000400F
Const CO_E_INIT_SCM_MAP_VIEW_OF_FILE = &H80004010
Const CO_E_INIT_SCM_EXEC_FAILURE = &H80004011
Const CO_E_INIT_ONLY_SINGLE_THREADED = &H80004012
Const S_OK = &H0
Const S_FALSE = &H1
Const OLE_E_FIRST = &H80040000
Const OLE_E_LAST = &H800400FF
Const OLE_S_FIRST = &H40000
Const OLE_S_LAST = &H400FF
Const OLE_E_OLEVERB = &H80040000
Const OLE_E_ADVF = &H80040001
Const OLE_E_ENUM_NOMORE = &H80040002
Const OLE_E_ADVISENOTSUPPORTED = &H80040003
Const OLE_E_NOCONNECTION = &H80040004
Const OLE_E_NOTRUNNING = &H80040005
Const OLE_E_NOCACHE = &H80040006
Const OLE_E_BLANK = &H80040007
Const OLE_E_CLASSDIFF = &H80040008
Const OLE_E_CANT_GETMONIKER = &H80040009
Const OLE_E_CANT_BINDTOSOURCE = &H8004000A
Const OLE_E_STATIC = &H8004000B
Const OLE_E_PROMPTSAVECANCELLED = &H8004000C
Const OLE_E_INVALIDRECT = &H8004000D
Const OLE_E_WRONGCOMPOBJ = &H8004000E
Const OLE_E_INVALIDHWND = &H8004000F
Const OLE_E_NOT_INPLACEACTIVE = &H80040010
Const OLE_E_CANTCONVERT = &H80040011
Const OLE_E_NOSTORAGE = &H80040012
Const DV_E_FORMATETC = &H80040064
Const DV_E_DVTARGETDEVICE = &H80040065
Const DV_E_STGMEDIUM = &H80040066
Const DV_E_STATDATA = &H80040067
Const DV_E_LINDEX = &H80040068
Const DV_E_TYMED = &H80040069
Const DV_E_CLIPFORMAT = &H8004006A
Const DV_E_DVASPECT = &H8004006B
Const DV_E_DVTARGETDEVICE_SIZE = &H8004006C
Const DV_E_NOIVIEWOBJECT = &H8004006D
Const DRAGDROP_E_FIRST = &H80040100
Const DRAGDROP_E_LAST = &H8004010F
Const DRAGDROP_S_FIRST = &H40100
Const DRAGDROP_S_LAST = &H4010F
Const DRAGDROP_E_NOTREGISTERED = &H80040100
Const DRAGDROP_E_ALREADYREGISTERED = &H80040101
Const DRAGDROP_E_INVALIDHWND = &H80040102
Const CLASSFACTORY_E_FIRST = &H80040110
Const CLASSFACTORY_E_LAST = &H8004011F
Const CLASSFACTORY_S_FIRST = &H40110
Const CLASSFACTORY_S_LAST = &H4011F
Const CLASS_E_NOAGGREGATION = &H80040110
Const CLASS_E_CLASSNOTAVAILABLE = &H80040111
Const MARSHAL_E_FIRST = &H80040120
Const MARSHAL_E_LAST = &H8004012F
Const MARSHAL_S_FIRST = &H40120
Const MARSHAL_S_LAST = &H4012F
Const DATA_E_FIRST = &H80040130
Const DATA_E_LAST = &H8004013F
Const DATA_S_FIRST = &H40130
Const DATA_S_LAST = &H4013F
Const VIEW_E_FIRST = &H80040140
Const VIEW_E_LAST = &H8004014F
Const VIEW_S_FIRST = &H40140
Const VIEW_S_LAST = &H4014F
Const VIEW_E_DRAW = &H80040140
Const REGDB_E_FIRST = &H80040150
Const REGDB_E_LAST = &H8004015F
Const REGDB_S_FIRST = &H40150
Const REGDB_S_LAST = &H4015F
Const REGDB_E_READREGDB = &H80040150
Const REGDB_E_WRITEREGDB = &H80040151
Const REGDB_E_KEYMISSING = &H80040152
Const REGDB_E_INVALIDVALUE = &H80040153
Const REGDB_E_CLASSNOTREG = &H80040154
Const REGDB_E_IIDNOTREG = &H80040155
Const CACHE_E_FIRST = &H80040170
Const CACHE_E_LAST = &H8004017F
Const CACHE_S_FIRST = &H40170
Const CACHE_S_LAST = &H4017F
Const CACHE_E_NOCACHE_UPDATED = &H80040170
Const OLEOBJ_E_FIRST = &H80040180
Const OLEOBJ_E_LAST = &H8004018F
Const OLEOBJ_S_FIRST = &H40180
Const OLEOBJ_S_LAST = &H4018F
Const OLEOBJ_E_NOVERBS = &H80040180
Const OLEOBJ_E_INVALIDVERB = &H80040181
Const CLIENTSITE_E_FIRST = &H80040190
Const CLIENTSITE_E_LAST = &H8004019F
Const CLIENTSITE_S_FIRST = &H40190
Const CLIENTSITE_S_LAST = &H4019F
Const INPLACE_E_NOTUNDOABLE = &H800401A0
Const INPLACE_E_NOTOOLSPACE = &H800401A1
Const INPLACE_E_FIRST = &H800401A0
Const INPLACE_E_LAST = &H800401AF
Const INPLACE_S_FIRST = &H401A0
Const INPLACE_S_LAST = &H401AF
Const ENUM_E_FIRST = &H800401B0
Const ENUM_E_LAST = &H800401BF
Const ENUM_S_FIRST = &H401B0
Const ENUM_S_LAST = &H401BF
Const CONVERT10_E_FIRST = &H800401C0
Const CONVERT10_E_LAST = &H800401CF
Const CONVERT10_S_FIRST = &H401C0
Const CONVERT10_S_LAST = &H401CF
Const CONVERT10_E_OLESTREAM_GET = &H800401C0
Const CONVERT10_E_OLESTREAM_PUT = &H800401C1
Const CONVERT10_E_OLESTREAM_FMT = &H800401C2
Const CONVERT10_E_OLESTREAM_BITMAP_TO_DIB = &H800401C3
Const CONVERT10_E_STG_FMT = &H800401C4
Const CONVERT10_E_STG_NO_STD_STREAM = &H800401C5
Const CONVERT10_E_STG_DIB_TO_BITMAP = &H800401C6
Const CLIPBRD_E_FIRST = &H800401D0
Const CLIPBRD_E_LAST = &H800401DF
Const CLIPBRD_S_FIRST = &H401D0
Const CLIPBRD_S_LAST = &H401DF
Const CLIPBRD_E_CANT_OPEN = &H800401D0
Const CLIPBRD_E_CANT_EMPTY = &H800401D1
Const CLIPBRD_E_CANT_SET = &H800401D2
Const CLIPBRD_E_BAD_DATA = &H800401D3
Const CLIPBRD_E_CANT_CLOSE = &H800401D4
Const MK_E_FIRST = &H800401E0
Const MK_E_LAST = &H800401EF
Const MK_S_FIRST = &H401E0
Const MK_S_LAST = &H401EF
Const MK_E_CONNECTMANUALLY = &H800401E0
Const MK_E_EXCEEDEDDEADLINE = &H800401E1
Const MK_E_NEEDGENERIC = &H800401E2
Const MK_E_UNAVAILABLE = &H800401E3
Const MK_E_SYNTAX = &H800401E4
Const MK_E_NOOBJECT = &H800401E5
Const MK_E_INVALIDEXTENSION = &H800401E6
Const MK_E_INTERMEDIATEINTERFACENOTSUPPORTED = &H800401E7
Const MK_E_NOTBINDABLE = &H800401E8
Const MK_E_NOTBOUND = &H800401E9
Const MK_E_CANTOPENFILE = &H800401EA
Const MK_E_MUSTBOTHERUSER = &H800401EB
Const MK_E_NOINVERSE = &H800401EC
Const MK_E_NOSTORAGE = &H800401ED
Const MK_E_NOPREFIX = &H800401EE
Const MK_E_ENUMERATION_FAILED = &H800401EF
Const CO_E_FIRST = &H800401F0
Const CO_E_LAST = &H800401FF
Const CO_S_FIRST = &H401F0
Const CO_S_LAST = &H401FF
Const CO_E_NOTINITIALIZED = &H800401F0
Const CO_E_ALREADYINITIALIZED = &H800401F1
Const CO_E_CANTDETERMINECLASS = &H800401F2
Const CO_E_CLASSSTRING = &H800401F3
Const CO_E_IIDSTRING = &H800401F4
Const CO_E_APPNOTFOUND = &H800401F5
Const CO_E_APPSINGLEUSE = &H800401F6
Const CO_E_ERRORINAPP = &H800401F7
Const CO_E_DLLNOTFOUND = &H800401F8
Const CO_E_ERRORINDLL = &H800401F9
Const CO_E_WRONGOSFORAPP = &H800401FA
Const CO_E_OBJNOTREG = &H800401FB
Const CO_E_OBJISREG = &H800401FC
Const CO_E_OBJNOTCONNECTED = &H800401FD
Const CO_E_APPDIDNTREG = &H800401FE
Const CO_E_RELEASED = &H800401FF
Const OLE_S_USEREG = &H40000
Const OLE_S_STATIC = &H40001
Const OLE_S_MAC_CLIPFORMAT = &H40002
Const DRAGDROP_S_DROP = &H40100
Const DRAGDROP_S_CANCEL = &H40101
Const DRAGDROP_S_USEDEFAULTCURSORS = &H40102
Const DATA_S_SAMEFORMATETC = &H40130
Const VIEW_S_ALREADY_FROZEN = &H40140
Const CACHE_S_FORMATETC_NOTSUPPORTED = &H40170
Const CACHE_S_SAMECACHE = &H40171
Const CACHE_S_SOMECACHES_NOTUPDATED = &H40172
Const OLEOBJ_S_INVALIDVERB = &H40180
Const OLEOBJ_S_CANNOT_DOVERB_NOW = &H40181
Const OLEOBJ_S_INVALIDHWND = &H40182
Const INPLACE_S_TRUNCATED = &H401A0
Const CONVERT10_S_NO_PRESENTATION = &H401C0
Const MK_S_REDUCED_TO_SELF = &H401E2
Const MK_S_ME = &H401E4
Const MK_S_HIM = &H401E5
Const MK_S_US = &H401E6
Const MK_S_MONIKERALREADYREGISTERED = &H401E7
Const CO_E_CLASS_CREATE_FAILED = &H80080001
Const CO_E_SCM_ERROR = &H80080002
Const CO_E_SCM_RPC_FAILURE = &H80080003
Const CO_E_BAD_PATH = &H80080004
Const CO_E_SERVER_EXEC_FAILURE = &H80080005
Const CO_E_OBJSRV_RPC_FAILURE = &H80080006
Const MK_E_NO_NORMALIZED = &H80080007
Const CO_E_SERVER_STOPPING = &H80080008
Const MEM_E_INVALID_ROOT = &H80080009
Const MEM_E_INVALID_LINK = &H80080010
Const MEM_E_INVALID_SIZE = &H80080011
Const DISP_E_UNKNOWNINTERFACE = &H80020001
Const DISP_E_MEMBERNOTFOUND = &H80020003
Const DISP_E_PARAMNOTFOUND = &H80020004
Const DISP_E_TYPEMISMATCH = &H80020005
Const DISP_E_UNKNOWNNAME = &H80020006
Const DISP_E_NONAMEDARGS = &H80020007
Const DISP_E_BADVARTYPE = &H80020008
Const DISP_E_EXCEPTION = &H80020009
Const DISP_E_OVERFLOW = &H8002000A
Const DISP_E_BADINDEX = &H8002000B
Const DISP_E_UNKNOWNLCID = &H8002000C
Const DISP_E_ARRAYISLOCKED = &H8002000D
Const DISP_E_BADPARAMCOUNT = &H8002000E
Const DISP_E_PARAMNOTOPTIONAL = &H8002000F
Const DISP_E_BADCALLEE = &H80020010
Const DISP_E_NOTACOLLECTION = &H80020011
Const TYPE_E_BUFFERTOOSMALL = &H80028016
Const TYPE_E_INVDATAREAD = &H80028018
Const TYPE_E_UNSUPFORMAT = &H80028019
Const TYPE_E_REGISTRYACCESS = &H8002801C
Const TYPE_E_LIBNOTREGISTERED = &H8002801D
Const TYPE_E_UNDEFINEDTYPE = &H80028027
Const TYPE_E_QUALIFIEDNAMEDISALLOWED = &H80028028
Const TYPE_E_INVALIDSTATE = &H80028029
Const TYPE_E_WRONGTYPEKIND = &H8002802A
Const TYPE_E_ELEMENTNOTFOUND = &H8002802B
Const TYPE_E_AMBIGUOUSNAME = &H8002802C
Const TYPE_E_NAMECONFLICT = &H8002802D
Const TYPE_E_UNKNOWNLCID = &H8002802E
Const TYPE_E_DLLFUNCTIONNOTFOUND = &H8002802F
Const TYPE_E_BADMODULEKIND = &H800288BD
Const TYPE_E_SIZETOOBIG = &H800288C5
Const TYPE_E_DUPLICATEID = &H800288C6
Const TYPE_E_INVALIDID = &H800288CF
Const TYPE_E_TYPEMISMATCH = &H80028CA0
Const TYPE_E_OUTOFBOUNDS = &H80028CA1
Const TYPE_E_IOERROR = &H80028CA2
Const TYPE_E_CANTCREATETMPFILE = &H80028CA3
Const TYPE_E_CANTLOADLIBRARY = &H80029C4A
Const TYPE_E_INCONSISTENTPROPFUNCS = &H80029C83
Const TYPE_E_CIRCULARTYPE = &H80029C84
Const STG_E_INVALIDFUNCTION = &H80030001
Const STG_E_FILENOTFOUND = &H80030002
Const STG_E_PATHNOTFOUND = &H80030003
Const STG_E_TOOMANYOPENFILES = &H80030004
Const STG_E_ACCESSDENIED = &H80030005
Const STG_E_INVALIDHANDLE = &H80030006
Const STG_E_INSUFFICIENTMEMORY = &H80030008
Const STG_E_INVALIDPOINTER = &H80030009
Const STG_E_NOMOREFILES = &H80030012
Const STG_E_DISKISWRITEPROTECTED = &H80030013
Const STG_E_SEEKERROR = &H80030019
Const STG_E_WRITEFAULT = &H8003001D
Const STG_E_READFAULT = &H8003001E
Const STG_E_SHAREVIOLATION = &H80030020
Const STG_E_LOCKVIOLATION = &H80030021
Const STG_E_FILEALREADYEXISTS = &H80030050
Const STG_E_INVALIDPARAMETER = &H80030057
Const STG_E_MEDIUMFULL = &H80030070
Const STG_E_ABNORMALAPIEXIT = &H800300FA
Const STG_E_INVALIDHEADER = &H800300FB
Const STG_E_INVALIDNAME = &H800300FC
Const STG_E_UNKNOWN = &H800300FD
Const STG_E_UNIMPLEMENTEDFUNCTION = &H800300FE
Const STG_E_INVALIDFLAG = &H800300FF
Const STG_E_INUSE = &H80030100
Const STG_E_NOTCURRENT = &H80030101
Const STG_E_REVERTED = &H80030102
Const STG_E_CANTSAVE = &H80030103
Const STG_E_OLDFORMAT = &H80030104
Const STG_E_OLDDLL = &H80030105
Const STG_E_SHAREREQUIRED = &H80030106
Const STG_E_NOTFILEBASEDSTORAGE = &H80030107
Const STG_E_EXTANTMARSHALLINGS = &H80030108
Const STG_S_CONVERTED = &H30200
Const RPC_E_CALL_REJECTED = &H80010001
Const RPC_E_CALL_CANCELED = &H80010002
Const RPC_E_CANTPOST_INSENDCALL = &H80010003
Const RPC_E_CANTCALLOUT_INASYNCCALL = &H80010004
Const RPC_E_CANTCALLOUT_INEXTERNALCALL = &H80010005
Const RPC_E_CONNECTION_TERMINATED = &H80010006
Const RPC_E_SERVER_DIED = &H80010007
Const RPC_E_CLIENT_DIED = &H80010008
Const RPC_E_INVALID_DATAPACKET = &H80010009
Const RPC_E_CANTTRANSMIT_CALL = &H8001000A
Const RPC_E_CLIENT_CANTMARSHAL_DATA = &H8001000B
Const RPC_E_CLIENT_CANTUNMARSHAL_DATA = &H8001000C
Const RPC_E_SERVER_CANTMARSHAL_DATA = &H8001000D
Const RPC_E_SERVER_CANTUNMARSHAL_DATA = &H8001000E
Const RPC_E_INVALID_DATA = &H8001000F
Const RPC_E_INVALID_PARAMETER = &H80010010
Const RPC_E_CANTCALLOUT_AGAIN = &H80010011
Const RPC_E_SERVER_DIED_DNE = &H80010012
Const RPC_E_SYS_CALL_FAILED = &H80010100
Const RPC_E_OUT_OF_RESOURCES = &H80010101
Const RPC_E_ATTEMPTED_MULTITHREAD = &H80010102
Const RPC_E_NOT_REGISTERED = &H80010103
Const RPC_E_FAULT = &H80010104
Const RPC_E_SERVERFAULT = &H80010105
Const RPC_E_CHANGED_MODE = &H80010106
Const RPC_E_INVALIDMETHOD = &H80010107
Const RPC_E_DISCONNECTED = &H80010108
Const RPC_E_RETRY = &H80010109
Const RPC_E_SERVERCALL_RETRYLATER = &H8001010A
Const RPC_E_SERVERCALL_REJECTED = &H8001010B
Const RPC_E_INVALID_CALLDATA = &H8001010C
Const RPC_E_CANTCALLOUT_ININPUTSYNCCALL = &H8001010D
Const RPC_E_WRONG_THREAD = &H8001010E
Const RPC_E_THREAD_NOT_INIT = &H8001010F
Const RPC_E_UNEXPECTED = &H8001FFFF


' ////////////////////////////////
'                               //
' Cdigos de estado de Winnet32 //
'                               //
' ////////////////////////////////

'   El nombre de usuario especificado no es vlido.
Const ERROR_BAD_USERNAME = 2202&

'   Esta conexin de red no existe.
Const ERROR_NOT_CONNECTED = 2250&

'   Esta conexin de red tiene archivos abiertos o peticiones pendientes.
Const ERROR_OPEN_FILES = 2401&

'   Un proceso activo est usando el dispositivo y ste no se puede desconectar.
Const ERROR_DEVICE_IN_USE = 2404&

'   El nombre de dispositivo especificado no es vlido.
Const ERROR_BAD_DEVICE = 1200&

'   El dispositivo no est conectado ahora pero tiene una conexin recordada.
Const ERROR_CONNECTION_UNAVAIL = 1201&

'   Se ha intentado recordar un dispositivo que ya se haba recordado previamente.
Const ERROR_DEVICE_ALREADY_REMEMBERED = 1202&

'   Ningn proveedor de red ha aceptado la ruta de acceso a red dada.
Const ERROR_NO_NET_OR_BAD_PATH = 1203&

'   El nombre de proveedor de red especificado no es vlido.
Const ERROR_BAD_PROVIDER = 1204&

'   Imposible abrir el perfil de conexin de la red.
Const ERROR_CANNOT_OPEN_PROFILE = 1205&

'   El perfil de conexin de la red est daado.
Const ERROR_BAD_PROFILE = 1206&

'   Imposible enumerar un no contenedor.
Const ERROR_NOT_CONTAINER = 1207&

'   Se ha producido un error ampliado.
Const ERROR_EXTENDED_ERROR = 1208&

'   El formato del nombre de grupo especificado no es vlido.
Const ERROR_INVALID_GROUPNAME = 1209&

'   El formato del nombre de equipo especificado no es vlido.
Const ERROR_INVALID_COMPUTERNAME = 1210&

'   El formato del nombre de evento especificado no es vlido.
Const ERROR_INVALID_EVENTNAME = 1211&

'   El formato del nombre de dominio especificado no es vlido.
Const ERROR_INVALID_DOMAINNAME = 1212&

'   El formato del nombre de servicio especificado no es vlido.
Const ERROR_INVALID_SERVICENAME = 1213&

'   El formato del nombre de red especificado no es vlido.
Const ERROR_INVALID_NETNAME = 1214&

'   El formato del nombre de recurso compartido especificado no es vlido.
Const ERROR_INVALID_SHARENAME = 1215&

'   El formato de la contrasea especificada no es vlido.
Const ERROR_INVALID_PASSWORDNAME = 1216&

'   El formato del nombre de mensaje especificado no es vlido.
Const ERROR_INVALID_MESSAGENAME = 1217&

'   El formato del destino de mensaje especificado no es vlido.
Const ERROR_INVALID_MESSAGEDEST = 1218&

'   Las credenciales suministradas entran en conflicto con un conjunto 
'   de credenciales existente.
Const ERROR_SESSION_CREDENTIAL_CONFLICT = 1219&

'   Se ha intentado establecer una sesin a un servidor de Lan Manager,
'   pero ya hay demasiadas sesiones establecidas para ese servidor.
Const ERROR_REMOTE_SESSION_LIMIT_EXCEEDED = 1220&

'   El nombre de grupo de trabajo o dominio ya est en uso por
'   otro equipo de la red.
Const ERROR_DUP_DOMAINNAME = 1221&

'   La red no est presente o no est iniciada.
Const ERROR_NO_NETWORK = 1222&


' //////////////////////////////////
'                                 //
'  Cdigos de estado de seguridad //
'                                 //
' //////////////////////////////////

'   No todos los privilegios a los que se ha hecho referencia 
'   estn asignados al que llama.
Const ERROR_NOT_ALL_ASSIGNED = 1300&

'   No se han hecho algunas asignaciones entre nombres de cuenta e Id. de seguridad.
Const ERROR_SOME_NOT_MAPPED = 1301&

'   No hay lmites de cuota de sistema establecidos especficamente para esta cuenta.
Const ERROR_NO_QUOTAS_FOR_ACCOUNT = 1302&

'   No hay disponible ninguna clave de codificacin. Se ha devuelto una clave 
'   de codificacin conocida.
Const ERROR_LOCAL_USER_SESSION_KEY = 1303&

'   La contrasea de NT es demasiado compleja para convertirla en contrasea
'   de LAN Manager. La contrasea de LAN Manager devuelta es una cadena NULL.
Const ERROR_NULL_LM_PASSWORD = 1304&

'   Nivel de revisin desconocido.
Const ERROR_UNKNOWN_REVISION = 1305&

'   Indica que dos niveles de revisin son incompatibles.
Const ERROR_REVISION_MISMATCH = 1306&

'   Puede que este Id. de seguridad no est asignado como propietario de este objeto.
Const ERROR_INVALID_OWNER = 1307&

'   Puede que este Id. de seguridad no est asignado como grupo primario de un objeto.
Const ERROR_INVALID_PRIMARY_GROUP = 1308&

'   Se ha intentado operar en un smbolo de representacin a travs de un
'   subproceso que no representa actualmente a ningn cliente.
Const ERROR_NO_IMPERSONATION_TOKEN = 1309&

'   Puede que el grupo no est desactivado.
Const ERROR_CANT_DISABLE_MANDATORY = 1310&

'   No hay servidores de inicio de sesin disponibles para
'   dar servicio a la peticin de inicio de sesin.
Const ERROR_NO_LOGON_SERVERS = 1311&

'   No existe una sesin de inicio especificada. Es posible que
'   alguien la haya terminado.
Const ERROR_NO_SUCH_LOGON_SESSION = 1312&

'   No existe un privilegio especificado.
Const ERROR_NO_SUCH_PRIVILEGE = 1313&

'   El cliente no tiene el privilegio requerido.
Const ERROR_PRIVILEGE_NOT_HELD = 1314&

'   El nombre dado no es un nombre de cuenta formado correctamente.
Const ERROR_INVALID_ACCOUNT_NAME = 1315&

'   El usuario especificado ya existe.
Const ERROR_USER_EXISTS = 1316&

'   El usuario especificado no existe.
Const ERROR_NO_SUCH_USER = 1317&

'   El grupo especificado ya existe.
Const ERROR_GROUP_EXISTS = 1318&

'   El grupo especificado no existe.
Const ERROR_NO_SUCH_GROUP = 1319&

'   La cuenta de usuario especificada ya es un miembro del grupo
'   especificado o el grupo especificado no se puede eliminar porque
'   contiene un miembro.
Const ERROR_MEMBER_IN_GROUP = 1320&

'   La cuenta de usuario especificada no es miembro de la cuenta del grupo especificado.
Const ERROR_MEMBER_NOT_IN_GROUP = 1321&

'   La ltima cuenta de administracin que queda no se puede
'   desactivar ni eliminar.
Const ERROR_LAST_ADMIN = 1322&

'   Imposible actualizar la contrasea. El valor proporcionado
'   como contrasea actual es incorrecto.
Const ERROR_WRONG_PASSWORD = 1323&

'   Imposible actualizar la contrasea. El valor proporcionado
'   para la contrasea nueva contiene valores que no estn permitidos 
'   en las contraseas.
Const ERROR_ILL_FORMED_PASSWORD = 1324&

'   Imposible actualizar la contrasea porque se ha infringido una
'   norma de la actualizacin de contraseas.
Const ERROR_PASSWORD_RESTRICTION = 1325&

'   Fallo en el inicio de sesin: nombre de usuario desconocido o contrasea incorrecta.
Const ERROR_LOGON_FAILURE = 1326&

'   Fallo en el inicio de sesin: restriccin de la cuenta de usuario.
Const ERROR_ACCOUNT_RESTRICTION = 1327&

'   Fallo en el inicio de sesin: infraccin de la restriccin de hora para inicio de sesin.
Const ERROR_INVALID_LOGON_HOURS = 1328&

'   Fallo en el inicio de sesin: no se permite al usuario iniciar la sesin en este equipo.
Const ERROR_INVALID_WORKSTATION = 1329&

'   Fallo en el inicio de sesin: la contrasea de cuenta especificada ha caducado.
Const ERROR_PASSWORD_EXPIRED = 1330&

'   Fallo en el inicio de sesin: cuenta desactivada actualmente.
Const ERROR_ACCOUNT_DISABLED = 1331&

'   No se realiz ninguna asignacin entre nombres de cuenta e Id. de seguridad.
Const ERROR_NONE_MAPPED = 1332&

'   Se han solicitado al mismo tiempo demasiados identificadores de usuario local (LUID).
Const ERROR_TOO_MANY_LUIDS_REQUESTED = 1333&

'   No hay ms identificadores de usuario local (LUID) disponibles.
Const ERROR_LUIDS_EXHAUSTED = 1334&

'   La parte de subautoridad de un Id. de seguridad no es vlida para este uso concreto.
Const ERROR_INVALID_SUB_AUTHORITY = 1335&

'   La estructura de la lista de control de acceso (ACL) no es vlida.
Const ERROR_INVALID_ACL = 1336&

'   La estructura del Id. de seguridad no es vlida.
Const ERROR_INVALID_SID = 1337&

'   La estructura del descriptor de seguridad no es vlida.
Const ERROR_INVALID_SECURITY_DESCR = 1338&

'   No se puede generar la lista de control de acceso (ACL) o la entrada
'   de control de acceso (ACE) heredada.
Const ERROR_BAD_INHERITANCE_ACL = 1340&

'   El servidor est desactivado actualmente.
Const ERROR_SERVER_DISABLED = 1341&

'   El servidor est activado actualmente.
Const ERROR_SERVER_NOT_DISABLED = 1342&

'   El valor proporcionado era un valor no vlido para una autoridad de identificador.
Const ERROR_INVALID_ID_AUTHORITY = 1343&

'   No hay ms memoria disponible para actualizar la informacin de seguridad.
Const ERROR_ALLOTTED_SPACE_EXCEEDED = 1344&

'   Los atributos especificados no son vlidos o son incompatibles con los
'   atributos del grupo en conjunto.
Const ERROR_INVALID_GROUP_ATTRIBUTES = 1345&

'   No se ha proporcionado un nivel de representacin requerido o
'   el nivel de representacin proporcionado no es vlido.
Const ERROR_BAD_IMPERSONATION_LEVEL = 1346&

'   Imposible abrir un smbolo de seguridad de nivel annimo.
Const ERROR_CANT_OPEN_ANONYMOUS = 1347&

'   La clase de informacin de validacin solicitada no era vlida.
Const ERROR_BAD_VALIDATION_CLASS = 1348&

'   El tipo del smbolo no es apropiado para el uso que intenta darle.
Const ERROR_BAD_TOKEN_TYPE = 1349&

'   Imposible efectuar una operacin de seguridad en un objeto
'   que no tiene seguridad asociada.
Const ERROR_NO_SECURITY_ON_OBJECT = 1350&

'   Indica que no se ha podido contactar con Windows NT Advanced 
'   Server o que los objetos pertenecientes al dominio estn
'   protegidos de forma que no se puede recuperar informacin necesaria.
Const ERROR_CANT_ACCESS_DOMAIN_INFO = 1351&

'   El administrador de cuentas de seguridad (SAM) o el servidor de
'   autoridad de seguridad local (LSA) estaban en un estado incorrecto
'   para realizar la operacin de seguridad.
Const ERROR_INVALID_SERVER_STATE = 1352&

'   El dominio estaba en un estado incorrecto para realizar la operacin de seguridad.
Const ERROR_INVALID_DOMAIN_STATE = 1353&

'   Esta operacin slo es vlida para el controlador principal del dominio.
Const ERROR_INVALID_DOMAIN_ROLE = 1354&

'   El dominio especificado no exista.
Const ERROR_NO_SUCH_DOMAIN = 1355&

'   El dominio especificado ya existe.
Const ERROR_DOMAIN_EXISTS = 1356&

'   Se ha intentado superar el lmite de nmero de dominios por servidor.
Const ERROR_DOMAIN_LIMIT_EXCEEDED = 1357&

'   Imposible completar la operacin solicitada porque ha habido un fallo
'   catastrfico del medio o se han daado las estructuras de datos en el disco.
Const ERROR_INTERNAL_DB_CORRUPTION = 1358&

'   La base de datos de cuentas de seguridad contiene una incoherencia interna.
Const ERROR_INTERNAL_ERROR = 1359&

'   Los tipos de acceso genricos estaban incluidos en una mscara de acceso
'   que ya debera estar asignada a tipos no genricos.
Const ERROR_GENERIC_NOT_MAPPED = 1360&

'   Un descriptor de seguridad no tiene el formato correcto (absoluto o relativo a s mismo).
Const ERROR_BAD_DESCRIPTOR_FORMAT = 1361&

'   El uso de la accin solicitada est restringido a los procesos de inicio de
'   sesin. El proceso de llamada no est registrado como proceso de inicio de sesin.
Const ERROR_NOT_LOGON_PROCESS = 1362&

'   Imposible iniciar una sesin de inicio con un Id. que ya se est usando.
Const ERROR_LOGON_SESSION_EXISTS = 1363&

'   Un paquete de autentificacin especificado es desconocido.
Const ERROR_NO_SUCH_PACKAGE = 1364&

'   La sesin de inicio no est en el estado que corresponde
'   a la operacin solicitada.
Const ERROR_BAD_LOGON_SESSION_STATE = 1365&

'   El Id. de inicio de sesin ya se est usando.
Const ERROR_LOGON_SESSION_COLLISION = 1366&

'   Una solicitud de inicio de sesin contena un valor 
'   de tipo de inicio de sesin no vlido.
Const ERROR_INVALID_LOGON_TYPE = 1367&

'   Imposible representar mediante una canalizacin con nombre
'   hasta que se hayan ledo los datos de esa canalizacin.
Const ERROR_CANNOT_IMPERSONATE = 1368&

'   El estado de transaccin de un subrbol del Registro
'   es incompatible con la operacin solicitada.
Const ERROR_RXACT_INVALID_STATE = 1369&

'   Se ha encontrado un dao interno en la base de datos de seguridad.
Const ERROR_RXACT_COMMIT_FAILURE = 1370&

'   Imposible realizar esta operacin en las cuentas incorporadas.
Const ERROR_SPECIAL_ACCOUNT = 1371&

'   Imposible realizar esta operacin en este grupo especial incorporado.
Const ERROR_SPECIAL_GROUP = 1372&

'   Imposible realizar esta operacin en este usuario especial incorporado.
Const ERROR_SPECIAL_USER = 1373&

'   No se puede quitar el usuario de un grupo porque ste es
'   ahora el grupo primario del usuario.
Const ERROR_MEMBERS_PRIMARY_GROUP = 1374&

'   El smbolo ya se est usando como smbolo primario.
Const ERROR_TOKEN_ALREADY_IN_USE = 1375&

'   El grupo local especificado no existe.
Const ERROR_NO_SUCH_ALIAS = 1376&

'   El nombre de cuenta especificado no es miembro del grupo local.
Const ERROR_MEMBER_NOT_IN_ALIAS = 1377&

'   El nombre de cuenta especificado ya es miembro del grupo local.
Const ERROR_MEMBER_IN_ALIAS = 1378&

'   El grupo local especificado ya existe.
Const ERROR_ALIAS_EXISTS = 1379&

'   Fallo en el inicio de sesin: no se ha otorgado al usuario el tipo de
'   inicio de sesin solicitado en su PC.
Const ERROR_LOGON_NOT_GRANTED = 1380&

'   Se ha superado el nmero mximo de secretos que se pueden
'   almacenar en un nico sistema.
Const ERROR_TOO_MANY_SECRETS = 1381&

'   La longitud de un secreto supera la longitud mxima permitida.
Const ERROR_SECRET_TOO_LONG = 1382&

'   La base de datos de autoridad de seguridad local contiene una incoherencia interna.
Const ERROR_INTERNAL_DB_ERROR = 1383&

'   Durante un intento de inicio de sesin, el contexto de seguridad del usuario
'   ha acumulado demasiados Id. de seguridad.
Const ERROR_TOO_MANY_CONTEXT_IDS = 1384&

'   Fallo en el inicio de sesin: no se ha otorgado al usuario el tipo de
'   inicio de sesin solicitado en su PC.
Const ERROR_LOGON_TYPE_NOT_GRANTED = 1385&

'   Es necesario usar una contrasea codificada para cambiar una contrasea de usuario.
Const ERROR_NT_CROSS_ENCRYPTION_REQUIRED = 1386&

'   No se pudo agregar un miembro nuevo al grupo
'   local porque el miembro no existe.
Const ERROR_NO_SUCH_MEMBER = 1387&

'   No se pudo agregar un miembro nuevo al grupo local
'   porque el miembro tiene un tipo de cuenta incorrecto.
Const ERROR_INVALID_MEMBER = 1388&

'   Hay demasiados Id. de seguridad especificados.
Const ERROR_TOO_MANY_SIDS = 1389&

'   Es necesario usar una contrasea codificada para cambiar 
'   la contrasea de este usuario.
Const ERROR_LM_CROSS_ENCRYPTION_REQUIRED = 1390&

'   Indica que una ACL no contiene componentes transferibles.
Const ERROR_NO_INHERITANCE = 1391&

'   El archivo o el directorio est daado y no se puede leer.
Const ERROR_FILE_CORRUPT = 1392&

'   La estructura del disco est daada y no se puede leer.
Const ERROR_DISK_CORRUPT = 1393&

'   No hay ninguna clave de sesin de usuario para la sesin de inicio especificada.
Const ERROR_NO_USER_SESSION_KEY = 1394&

'  Fin de los cdigos de error de seguridad


' /////////////////////////////////
'                                //
'  Cdigos de error de WinUser   //
'                                //
' /////////////////////////////////

'   El controlador de ventana no es vlido.
Const ERROR_INVALID_WINDOW_HANDLE = 1400&

'   El controlador de men no es vlido.
Const ERROR_INVALID_MENU_HANDLE = 1401&

'   El controlador de cursor no es vlido.
Const ERROR_INVALID_CURSOR_HANDLE = 1402&

'   El controlador de la tabla de aceleradoras no es vlido.
Const ERROR_INVALID_ACCEL_HANDLE = 1403&

'   El controlador del enlace no es vlido.
Const ERROR_INVALID_HOOK_HANDLE = 1404&

'   Controlador no vlido para una estructura de posicin de ventanas mltiples.
Const ERROR_INVALID_DWP_HANDLE = 1405&

'   Imposible crear una ventana secundaria de nivel superior.
Const ERROR_TLW_WITH_WSCHILD = 1406&

'   Imposible encontrar la clase de ventana.
Const ERROR_CANNOT_FIND_WND_CLASS = 1407&

'   Ventana no vlida; pertenece a otro subproceso.
Const ERROR_WINDOW_OF_OTHER_THREAD = 1408&

'   La tecla de acceso rpido ya est registrada.
Const ERROR_HOTKEY_ALREADY_REGISTERED = 1409&

'   Ya existe esta clase.
Const ERROR_CLASS_ALREADY_EXISTS = 1410&

'   La clase no existe.
Const ERROR_CLASS_DOES_NOT_EXIST = 1411&

'   La clase tiene todava ventanas abiertas.
Const ERROR_CLASS_HAS_WINDOWS = 1412&

'   El ndice no es vlido.
Const ERROR_INVALID_INDEX = 1413&

'   El controlador de iconos no es vlido.
Const ERROR_INVALID_ICON_HANDLE = 1414&

'   Usando las palabras de la ventana privada de DILOGO.
Const ERROR_PRIVATE_DIALOG_INDEX = 1415&

'   No se encontr el identificador del cuadro de lista.
Const ERROR_LISTBOX_ID_NOT_FOUND = 1416&

'   No se encontraron caracteres comodn.
Const ERROR_NO_WILDCARD_CHARACTERS = 1417&

'   El subproceso no tiene un portapapeles abierto.
Const ERROR_CLIPBOARD_NOT_OPEN = 1418&

'   La tecla de acceso rpido no est registrada.
Const ERROR_HOTKEY_NOT_REGISTERED = 1419&

'   La ventana no es una ventana de dilogo vlida.
Const ERROR_WINDOW_NOT_DIALOG = 1420&

'   No se encontr el Id. del control.
Const ERROR_CONTROL_ID_NOT_FOUND = 1421&

'   Mensaje no vlido para un cuadro combinado, porque no tiene un control de edicin.
Const ERROR_INVALID_COMBOBOX_MESSAGE = 1422&

'   La ventana no es un cuadro combinado.
Const ERROR_WINDOW_NOT_COMBOBOX = 1423&

'   El alto tiene que ser inferior a 256.
Const ERROR_INVALID_EDIT_HEIGHT = 1424&

'   El controlador del contexto de dispositivo (DC) no es vlido.
Const ERROR_DC_NOT_FOUND = 1425&

'   El tipo de procedimiento de enlace no es vlido.
Const ERROR_INVALID_HOOK_FILTER = 1426&

'   El procedimiento de enlace no es vlido.
Const ERROR_INVALID_FILTER_PROC = 1427&

'   Imposible establecer un enlace no local sin un controlador de mdulos.
Const ERROR_HOOK_NEEDS_HMOD = 1428&

'   Este procedimiento de enlace slo se puede establecer globalmente.
Const ERROR_PUBLIC_ONLY_HOOK = 1429&

'   El procedimiento de enlace de diario ya est instalado.
Const ERROR_JOURNAL_HOOK_SET = 1430&

'   El procedimiento de enlace no est instalado.
Const ERROR_HOOK_NOT_INSTALLED = 1431&

'   El mensaje no es vlido para un cuadro de lista de seleccin nica.
Const ERROR_INVALID_LB_MESSAGE = 1432&

'   Se envi LB_SETCOUNT a un cuadro de lista activo.
Const ERROR_SETCOUNT_ON_BAD_LB = 1433&

'   Este cuadro de lista no admite tabuladores.
Const ERROR_LB_WITHOUT_TABSTOPS = 1434&

'   Imposible destruir un objeto creado por otro subproceso.
Const ERROR_DESTROY_OBJECT_OF_OTHER_THREAD = 1435&

'   Las ventanas secundarias no pueden tener mens.
Const ERROR_CHILD_WINDOW_MENU = 1436&

'   La ventana no tiene un men de sistema.
Const ERROR_NO_SYSTEM_MENU = 1437&

'   El estilo de cuadro de mensajes no es vlido.
Const ERROR_INVALID_MSGBOX_STYLE = 1438&

'   El parmetro (SPI_) de nivel de sistema no es vlido.
Const ERROR_INVALID_SPI_VALUE = 1439&

'   La pantalla ya est bloqueada.
Const ERROR_SCREEN_ALREADY_LOCKED = 1440&

'   Todos los controladores para ventanas de una estructura de posicin
'   de ventanas mltiples deben tener la misma ventana primaria.
Const ERROR_HWNDS_HAVE_DIFF_PARENT = 1441&

'   La ventana no es una ventana secundaria.
Const ERROR_NOT_CHILD_WINDOW = 1442&

'   El comando GW_ no es vlido.
Const ERROR_INVALID_GW_COMMAND = 1443&

'   El identificador del subproceso no es vlido.
Const ERROR_INVALID_THREAD_ID = 1444&

'   Imposible procesar un mensaje desde una ventana que no es una
'   ventana con interfaz de documentos mltiples (MDI).
Const ERROR_NON_MDICHILD_WINDOW = 1445&

'   El men emergente ya est activo.
Const ERROR_POPUP_ALREADY_ACTIVE = 1446&

'   La ventana no tiene barras de desplazamiento.
Const ERROR_NO_SCROLLBARS = 1447&

'   El intervalo de la barra de desplazamiento no puede ser mayor que 0x7FFF.
Const ERROR_INVALID_SCROLLBAR_RANGE = 1448&

'   No se puede mostrar o quitar la ventana de la forma especificada.
Const ERROR_INVALID_SHOWWIN_COMMAND = 1449&

'  Fin de los cdigos de error de WinUser


' /////////////////////////////////////////////
'                                            //
'  Cdigos de estado del registro de sucesos //
'                                            //
' /////////////////////////////////////////////

'   El archivo del registro de sucesos est daado.
Const ERROR_EVENTLOG_FILE_CORRUPT = 1500&

'   No se pudo abrir ningn archivo del registro de sucesos; por eso
'   no se ha iniciado el servicio de registro.
Const ERROR_EVENTLOG_CANT_START = 1501&

'   El archivo del registro de sucesos est lleno.
Const ERROR_LOG_FILE_FULL = 1502&

'   El archivo del registro de sucesos ha cambiado entre dos lecturas.
Const ERROR_EVENTLOG_FILE_CHANGED = 1503&

'  Fin de los cdigos de error del registro de sucesos	


' ////////////////////////////////
'                               //
'    Cdigos de estado de RPC   //
'                               //
' ////////////////////////////////

'   El enlace de la cadena no es vlido.
Const RPC_S_INVALID_STRING_BINDING = 1700&

'   El controlador de enlaces no es del tipo correcto.
Const RPC_S_WRONG_KIND_OF_BINDING = 1701&

'   El controlador de enlaces no es vlido.
Const RPC_S_INVALID_BINDING = 1702&

'   La secuencia del protocolo RPC no es compatible.
Const RPC_S_PROTSEQ_NOT_SUPPORTED = 1703&

'   La secuencia del protocolo RPC no es vlida.
Const RPC_S_INVALID_RPC_PROTSEQ = 1704&

'   El identificador nico universal (UUID) de cadenas no es vlido.
Const RPC_S_INVALID_STRING_UUID = 1705&

'   El formato del punto final no es vlido.
Const RPC_S_INVALID_ENDPOINT_FORMAT = 1706&

'   La direccin de red no es vlida.
Const RPC_S_INVALID_NET_ADDR = 1707&

'   No se encontr ningn punto final.
Const RPC_S_NO_ENDPOINT_FOUND = 1708&

'   El valor de tiempo de espera no es vlido.
Const RPC_S_INVALID_TIMEOUT = 1709&

'   No se encontr el identificador nico universal (UUID) de objetos.
Const RPC_S_OBJECT_NOT_FOUND = 1710&

'   El identificador nico universal (UUID) de objetos ya se ha registrado.
Const RPC_S_ALREADY_REGISTERED = 1711&

'   El identificador nico universal (UUID) de tipos ya se ha registrado.
Const RPC_S_TYPE_ALREADY_REGISTERED = 1712&

'   El servidor RPC ya est en espera.
Const RPC_S_ALREADY_LISTENING = 1713&

'   No se han registrado secuencias de protocolo.
Const RPC_S_NO_PROTSEQS_REGISTERED = 1714&

'   El servidor RPC no est en espera.
Const RPC_S_NOT_LISTENING = 1715&

'   Tipo de administrador desconocido.
Const RPC_S_UNKNOWN_MGR_TYPE = 1716&

'   Interfaz desconocida.
Const RPC_S_UNKNOWN_IF = 1717&

'   No hay enlaces.
Const RPC_S_NO_BINDINGS = 1718&

'   No hay secuencias de protocolo.
Const RPC_S_NO_PROTSEQS = 1719&

'   Imposible crear el punto final.
Const RPC_S_CANT_CREATE_ENDPOINT = 1720&

'   No hay recursos suficientes disponibles para completar esta operacin.
Const RPC_S_OUT_OF_RESOURCES = 1721&

'   El servidor RPC no est disponible.
Const RPC_S_SERVER_UNAVAILABLE = 1722&

'   El servidor RPC est demasiado ocupado para completar esta operacin.
Const RPC_S_SERVER_TOO_BUSY = 1723&

'   Las opciones de red no son vlidas.
Const RPC_S_INVALID_NETWORK_OPTIONS = 1724&

'   No hay una llamada activa a procedimiento remoto en este subproceso.
Const RPC_S_NO_CALL_ACTIVE = 1725&

'   Fall la llamada a procedimiento remoto.
Const RPC_S_CALL_FAILED = 1726&

'   La llamada a procedimiento remoto fall y no se ha ejecutado.
Const RPC_S_CALL_FAILED_DNE = 1727&

'   Se ha producido un error de protocolo de llamada a procedimiento remoto (RPC).
Const RPC_S_PROTOCOL_ERROR = 1728&

'   El servidor RPC no admite la sintaxis de transferencia.
Const RPC_S_UNSUPPORTED_TRANS_SYN = 1730&

'   El tipo de identificador nico universal (UUID) no es compatible.
Const RPC_S_UNSUPPORTED_TYPE = 1732&

'   La etiqueta no es vlida.
Const RPC_S_INVALID_TAG = 1733&

'   Los lmites de la matriz no son vlidos.
Const RPC_S_INVALID_BOUND = 1734&

'   El enlace no contiene un nombre de entrada.
Const RPC_S_NO_ENTRY_NAME = 1735&

'   La sintaxis del nombre no es vlida.
Const RPC_S_INVALID_NAME_SYNTAX = 1736&

'   La sintaxis del nombre no es compatible.
Const RPC_S_UNSUPPORTED_NAME_SYNTAX = 1737&

'   No hay ninguna direccin de red disponible para generar un
'   identificador nico universal (UUID).
Const RPC_S_UUID_NO_ADDRESS = 1739&

'   El punto final es un duplicado.
Const RPC_S_DUPLICATE_ENDPOINT = 1740&

'   Tipo de autentificacin desconocido.
Const RPC_S_UNKNOWN_AUTHN_TYPE = 1741&

'   El nmero mximo de llamadas es demasiado reducido.
Const RPC_S_MAX_CALLS_TOO_SMALL = 1742&

'   La cadena es demasiado larga.
Const RPC_S_STRING_TOO_LONG = 1743&

'   No se encontr la secuencia del protocolo RPC.
Const RPC_S_PROTSEQ_NOT_FOUND = 1744&

'   El nmero de procedimiento est fuera del intervalo.
Const RPC_S_PROCNUM_OUT_OF_RANGE = 1745&

'   El enlace no contiene informacin de autentificacin.
Const RPC_S_BINDING_HAS_NO_AUTH = 1746&

'   Servicio de autentificacin desconocido.
Const RPC_S_UNKNOWN_AUTHN_SERVICE = 1747&

'   Nivel de autentificacin desconocido.
Const RPC_S_UNKNOWN_AUTHN_LEVEL = 1748&

'   El contexto de seguridad no es vlido.
Const RPC_S_INVALID_AUTH_IDENTITY = 1749&

'   Servicio de autorizacin desconocido.
Const RPC_S_UNKNOWN_AUTHZ_SERVICE = 1750&

'   La entrada no es vlida.
Const EPT_S_INVALID_ENTRY = 1751&

'   El punto final del servidor no puede realizar la operacin.
Const EPT_S_CANT_PERFORM_OP = 1752&

'   No hay ms puntos finales disponibles en el asignador de puntos finales.
Const EPT_S_NOT_REGISTERED = 1753&

'   No se ha exportado ninguna interfaz.
Const RPC_S_NOTHING_TO_EXPORT = 1754&

'   El nombre de la entrada est incompleto.
Const RPC_S_INCOMPLETE_NAME = 1755&

'   La opcin de la versin no es vlida.
Const RPC_S_INVALID_VERS_OPTION = 1756&

'   No hay ms miembros.
Const RPC_S_NO_MORE_MEMBERS = 1757&

'   No hay nada que desexportar.
Const RPC_S_NOT_ALL_OBJS_UNEXPORTED = 1758&

'   No se encontr la interfaz.
Const RPC_S_INTERFACE_NOT_FOUND = 1759&

'   La entrada ya existe.
Const RPC_S_ENTRY_ALREADY_EXISTS = 1760&

'   No se encontr la entrada.
Const RPC_S_ENTRY_NOT_FOUND = 1761&

'   Nombre de servicio no disponible.
Const RPC_S_NAME_SERVICE_UNAVAILABLE = 1762&

'   La familia de direcciones de red no es vlida.
Const RPC_S_INVALID_NAF_ID = 1763&

'   La operacin solicitada no es compatible.
Const RPC_S_CANNOT_SUPPORT = 1764&

'   No hay ningn contexto de seguridad disponible para permitir la representacin.
Const RPC_S_NO_CONTEXT_AVAILABLE = 1765&

'   Error interno en una llamada a procedimiento remoto (RPC).
Const RPC_S_INTERNAL_ERROR = 1766&

'   El servidor RPC intent dividir un entero entre cero.
Const RPC_S_ZERO_DIVIDE = 1767&

'   Error de direccionamiento en el servidor RPC.
Const RPC_S_ADDRESS_ERROR = 1768&

'   Una operacin de punto flotante caus una divisin
'   entre cero en el servidor RPC.
Const RPC_S_FP_DIV_ZERO = 1769&

'   Se ha producido un desbordamiento de lmite inferior a
'   causa de un punto flotante en el servidor RPC.
Const RPC_S_FP_UNDERFLOW = 1770&

'   Se ha producido un desbordamiento de lmite superior a
'   causa de un punto flotante en el servidor RPC.
Const RPC_S_FP_OVERFLOW = 1771&

'   Se ha agotado la lista de servidores RPC disponibles para
'   el enlace de auto-controladores.
Const RPC_X_NO_MORE_ENTRIES = 1772&

'   Imposible abrir el archivo de la tabla de conversin de caracteres.
Const RPC_X_SS_CHAR_TRANS_OPEN_FAIL = 1773&

'   El archivo que contiene la tabla de conversin de caracteres
'   tiene menos de 512 bytes.
Const RPC_X_SS_CHAR_TRANS_SHORT_FILE = 1774&

'   Se ha pasado un controlador de contexto nulo del cliente al
'   host durante una llamada a procedimiento remoto.
Const RPC_X_SS_IN_NULL_CONTEXT = 1775&

'   El controlador de contexto cambi durante una llamada a
'   procedimiento remoto.
Const RPC_X_SS_CONTEXT_DAMAGED = 1777&

'   Los controladores de enlace pasados a una llamada a
'   procedimiento remoto no coinciden.
Const RPC_X_SS_HANDLES_MISMATCH = 1778&

'   La etiqueta no pudo obtener el controlador de llamada a
'   procedimiento remoto.
Const RPC_X_SS_CANNOT_GET_CALL_HANDLE = 1779&

'   Se ha pasado un puntero de referencia nulo a la etiqueta.
Const RPC_X_NULL_REF_POINTER = 1780&

'   El valor de enumeracin est fuera del intervalo.
Const RPC_X_ENUM_VALUE_OUT_OF_RANGE = 1781&

'   El recuento de bytes es demasiado bajo.
Const RPC_X_BYTE_COUNT_TOO_SMALL = 1782&

'   La etiqueta recibi datos errneos.
Const RPC_X_BAD_STUB_DATA = 1783&

'   El bfer de usuario proporcionado no es vlido para la operacin solicitada.
Const ERROR_INVALID_USER_BUFFER = 1784&

'   No se reconoce el medio de disco. Puede que no est formateado.
Const ERROR_UNRECOGNIZED_MEDIA = 1785&

'   No se ha confiado ningn secreto a la estacin de trabajo.
Const ERROR_NO_TRUST_LSA_SECRET = 1786&

'   La base de datos SAM de Windows NT Advanced Server no tiene cuenta
'   de PC para esta relacin de confianza con la estacin de trabajo.
Const ERROR_NO_TRUST_SAM_ACCOUNT = 1787&

'   Fall la relacin de confianza entre el dominio principal y el
'   dominio de confianza.
Const ERROR_TRUSTED_DOMAIN_FAILURE = 1788&

'   Fall la relacin de confianza entre esta estacin de trabajo
'   y el dominio principal.
Const ERROR_TRUSTED_RELATIONSHIP_FAILURE = 1789&

'   Fall el inicio de sesin en red.
Const ERROR_TRUST_FAILURE = 1790&

'   Ya se est efectuando una llamada a procedimiento remoto para este subproceso.
Const RPC_S_CALL_IN_PROGRESS = 1791&

'   Se ha intentado iniciar la sesin, pero el servicio de inicio de 
'   sesin en red no estaba iniciado.
Const ERROR_NETLOGON_NOT_STARTED = 1792&

'   Ha caducado la cuenta del usuario.
Const ERROR_ACCOUNT_EXPIRED = 1793&

'   El redirector est en uso y no se puede descargar.
Const ERROR_REDIRECTOR_HAS_OPEN_HANDLES = 1794&

'   El controlador de impresora especificado ya est instalado.
Const ERROR_PRINTER_DRIVER_ALREADY_INSTALLED = 1795&

'   Puerto especificado desconocido.
Const ERROR_UNKNOWN_PORT = 1796&

'   Controlador de impresora desconocido.
Const ERROR_UNKNOWN_PRINTER_DRIVER = 1797&

'   Procesador de impresin desconocido.
Const ERROR_UNKNOWN_PRINTPROCESSOR = 1798&

'   El archivo separador especificado no es vlido.
Const ERROR_INVALID_SEPARATOR_FILE = 1799&

'   La prioridad especificada no es vlida.
Const ERROR_INVALID_PRIORITY = 1800&

'   El nombre de impresora no es vlido.
Const ERROR_INVALID_PRINTER_NAME = 1801&

'   La impresora ya existe.
Const ERROR_PRINTER_ALREADY_EXISTS = 1802&

'   El comando de impresora no es vlido.
Const ERROR_INVALID_PRINTER_COMMAND = 1803&

'   El tipo de datos especificado no es vlido.
Const ERROR_INVALID_DATATYPE = 1804&

'   El entorno especificado no es vlido.
Const ERROR_INVALID_ENVIRONMENT = 1805&

'   No hay ms enlaces.
Const RPC_S_NO_MORE_BINDINGS = 1806&

'   La cuenta utilizada es una cuenta de confianza entre dominios. Use la 
'   cuenta de usuario global o la cuenta de usuario local para tener
'   acceso a este servidor.
Const ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT = 1807&

'   La cuenta utilizada es una cuenta de PC. Use la cuenta de usuario global 
'   o la cuenta de usuario local para tener acceso a este servidor.
Const ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT = 1808&

'   La cuenta utilizada es una cuenta de confianza de servidor. Use la 
'   cuenta de usuario global o la cuenta de usuario local para tener 
'   acceso a este servidor.
Const ERROR_NOLOGON_SERVER_TRUST_ACCOUNT = 1809&

'   El nombre o el Id. de seguridad (SID) del dominio especificado no es coherente
'   con la informacin de confianza para ese dominio.
Const ERROR_DOMAIN_TRUST_INCONSISTENT = 1810&

'   El servidor est en uso y no se puede descargar.
Const ERROR_SERVER_HAS_OPEN_HANDLES = 1811&

'   El archivo de imagen especificado no contena una seccin de recursos.
Const ERROR_RESOURCE_DATA_NOT_FOUND = 1812&

'   No se puede encontrar el tipo de recurso especificado en el archivo de imagen.
Const ERROR_RESOURCE_TYPE_NOT_FOUND = 1813&

'   No se puede encontrar el nombre de recurso especificado en el archivo de imagen.
Const ERROR_RESOURCE_NAME_NOT_FOUND = 1814&

'   No se puede encontrar el Id. de idioma del recurso especificado en el archivo de imagen.
Const ERROR_RESOURCE_LANG_NOT_FOUND = 1815&

'   No hay cuota suficiente para procesar este comando.
Const ERROR_NOT_ENOUGH_QUOTA = 1816&

'   No se encontr el miembro del grupo.
Const RPC_S_GROUP_MEMBER_NOT_FOUND = 1898&

'   Imposible crear la base de datos del asignador de puntos finales.
Const EPT_S_CANT_CREATE = 1899&

'   El identificador nico universal (UUID) de objetos es el UUID nulo.
Const RPC_S_INVALID_OBJECT = 1900&

'   La hora especificada no es vlida.
Const ERROR_INVALID_TIME = 1901&

'   El nombre de formulario especificado no es vlido.
Const ERROR_INVALID_FORM_NAME = 1902&

'   El tamao de formulario especificado no es vlido
Const ERROR_INVALID_FORM_SIZE = 1903&

'   Ya se est esperando al controlador de impresora especificado
Const ERROR_ALREADY_WAITING = 1904&

'   Se ha eliminado la impresora especificada
Const ERROR_PRINTER_DELETED = 1905&

'   El estado de la impresora no es vlido
Const ERROR_INVALID_PRINTER_STATE = 1906&

'   No est disponible en este momento la lista de servidores para este grupo de trabajo
Const ERROR_NO_BROWSER_SERVERS_FOUND = 6118&


' -------------------------
'  Seccin MMSystem
' -------------------------

' En esta seccin se define toda la ayuda tcnica para las aplicaciones Multimedia.

' constantes generales
Const MAXPNAMELEN = 32  '  longitud mx. del nombre del producto (incluido NULL)
Const MAXERRORLENGTH = 128  '  longitud mx. del texto de error (incluido NULL final)

Type smpte
        hour As Byte
        min As Byte
        sec As Byte
        frame As Byte
        fps As Byte
        dummy As Byte
        pad(2) As Byte
End Type

Type midi
        songptrpos As Long
End Type

Type MMTIME
        wType As Long
        u As Long
End Type

'  Valores para el campo wType en la estructura MMTIME 
Const TIME_MS = &H1        '  hora en milisegundos
Const TIME_SAMPLES = &H2   '  nmero de muestras de ondas
Const TIME_BYTES = &H4     '  desplazamiento de bytes actual
Const TIME_SMPTE = &H8     '  hora SMPTE
Const TIME_MIDI = &H10     '  hora MIDI

'  Mensajes de ventana multimedia
Const MM_JOY1MOVE = &H3A0  '  joystick
Const MM_JOY2MOVE = &H3A1
Const MM_JOY1ZMOVE = &H3A2
Const MM_JOY2ZMOVE = &H3A3
Const MM_JOY1BUTTONDOWN = &H3B5
Const MM_JOY2BUTTONDOWN = &H3B6
Const MM_JOY1BUTTONUP = &H3B7
Const MM_JOY2BUTTONUP = &H3B8

Const MM_MCINOTIFY = &H3B9  '  MCI
Const MM_MCISYSTEM_STRING = &H3CA

Const MM_WOM_OPEN = &H3BB  '  salida de forma de onda
Const MM_WOM_CLOSE = &H3BC
Const MM_WOM_DONE = &H3BD

Const MM_WIM_OPEN = &H3BE  '  entrada de forma de onda
Const MM_WIM_CLOSE = &H3BF
Const MM_WIM_DATA = &H3C0

Const MM_MIM_OPEN = &H3C1  '  entrada MIDI
Const MM_MIM_CLOSE = &H3C2
Const MM_MIM_DATA = &H3C3
Const MM_MIM_LONGDATA = &H3C4
Const MM_MIM_ERROR = &H3C5
Const MM_MIM_LONGERROR = &H3C6

Const MM_MOM_OPEN = &H3C7  '  salida MIDI 
Const MM_MOM_CLOSE = &H3C8
Const MM_MOM_DONE = &H3C9

' Bases de nmeros de recursos de cadena (uso interno)

Const MMSYSERR_BASE = 0
Const WAVERR_BASE = 32
Const MIDIERR_BASE = 64
Const TIMERR_BASE = 96   '  era 128; se cambi para que coincidiera con Win 31 Sonic
Const JOYERR_BASE = 160
Const MCIERR_BASE = 256

Const MCI_STRING_OFFSET = 512  '  si se cambia este nmero, TIENE que
                                      '  modificar la lista MCI_DEVTYPE_... que est ms abajo
Const MCI_VD_OFFSET = 1024
Const MCI_CD_OFFSET = 1088
Const MCI_WAVE_OFFSET = 1152
Const MCI_SEQ_OFFSET = 1216

' Valores de retorno de los errores generales
Const MMSYSERR_NOERROR = 0  '  ningn error
Const MMSYSERR_ERROR = (MMSYSERR_BASE + 1)  '  error no especificado
Const MMSYSERR_BADDEVICEID = (MMSYSERR_BASE + 2)  '  Id. de dispositivo fuera del intervalo
Const MMSYSERR_NOTENABLED = (MMSYSERR_BASE + 3)  '  fallo en dispositivo: activar
Const MMSYSERR_ALLOCATED = (MMSYSERR_BASE + 4)  '  dispositivo ya asignado
Const MMSYSERR_INVALHANDLE = (MMSYSERR_BASE + 5)  '  controlador de dispositivo no vlido 
Const MMSYSERR_NODRIVER = (MMSYSERR_BASE + 6)  '  no est presente el controlador de dispositivo
Const MMSYSERR_NOMEM = (MMSYSERR_BASE + 7)  '  error de asignacin de memoria
Const MMSYSERR_NOTSUPPORTED = (MMSYSERR_BASE + 8)  '  funcin no compatible
Const MMSYSERR_BADERRNUM = (MMSYSERR_BASE + 9)  '  valor de error fuera del intervalo
Const MMSYSERR_INVALFLAG = (MMSYSERR_BASE + 10) '  pasado indicador no vlido
Const MMSYSERR_INVALPARAM = (MMSYSERR_BASE + 11) '  pasado parmetro no vlido
Const MMSYSERR_HANDLEBUSY = (MMSYSERR_BASE + 12) '  el controlador se est usando
                                                   '  simultneamente en otro subproceso
                                                   '  (por ejemplo, devolucin de llamada)
Const MMSYSERR_INVALIDALIAS = (MMSYSERR_BASE + 13) '  "Alias especificado no encontrado en WIN.INI
Const MMSYSERR_LASTERROR = (MMSYSERR_BASE + 13) '  ltimo error del intervalo
Const MM_MOM_POSITIONCB = &H3CA              '  Devolucin de llamada para MEVT_POSITIONCB
Const MM_MCISIGNAL = &H3CB
Const MM_MIM_MOREDATA = &H3CC                '  MIM_DONE con eventos pendientes
Const MIDICAPS_STREAM = &H8               '  el controlador admite midiStreamOut directamente
 

Type MIDIEVENT
        dwDeltaTime As Long          '  Marcas desde el ltimo evento
        dwStreamID As Long           '  Reservado; tiene que ser cero
        dwEvent As Long              '  Tipo y parmetros del evento
        dwParms(1) As Long           '  Parmetros si es un evento Long
End Type

Type MIDISTRMBUFFVER
        dwVersion As Long                  '  Versin del formato del bfer de transferencia
        dwMid As Long                      '  Id. del fabricante definido en MMREG.H
        dwOEMVersion As Long               '  Versin del fabricante para las ampliaciones 
End Type

'  Cdigos de tipos que van en el byte superior del evento DWORD de un bfer de transferencia

'  Los cdigos de tipos 00-7F contienen parmetros que se encuentran en los 24 bits inferiores
'  Los cdigos de tipos 80-FF contienen una longitud de su parmetro en los 24 bits inferiores,
'  seguida por sus datos de parmetro en el bfer. El evento DWORD contiene la longitud
'  de byte exacta; hay que poner caracteres de relleno en los datos del parmetro 
'  para que sea un par con longitud mltiplo de 4 bytes.
'

Const MEVT_F_SHORT = &H0&
Const MEVT_F_LONG = &H80000000
Const MEVT_F_CALLBACK = &H40000000
Const MIDISTRM_ERROR = -2

'
'  Estructuras y definiciones para midiStreamProperty
'
Const MIDIPROP_SET = &H80000000
Const MIDIPROP_GET = &H40000000

'  Ambos son distintos de cero intencionalmente para que la aplicacin no pueda abandonar
'  la operacin accidentalmente y parezca que est trabajando debido a una accin
'  predeterminada.

Const MIDIPROP_TIMEDIV = &H1&
Const MIDIPROP_TEMPO = &H2&

Type MIDIPROPTIMEDIV
        cbStruct As Long
        dwTimeDiv As Long
End Type

Type MIDIPROPTEMPO
        cbStruct As Long
        dwTempo As Long
End Type


'  Prototipos de funciones MIDI *

' ***************************************************************************

'                        Compatibilidad del mezclador

' **************************************************************************

Const MIXER_SHORT_NAME_CHARS = 16
Const MIXER_LONG_NAME_CHARS = 64

'
'   Valores de retorno de error MMRESULT especficos de la API del mezclador
'
'
Const MIXERR_BASE = 1024
Const MIXERR_INVALLINE = (MIXERR_BASE + 0)
Const MIXERR_INVALCONTROL = (MIXERR_BASE + 1)
Const MIXERR_INVALVALUE = (MIXERR_BASE + 2)
Const MIXERR_LASTERROR = (MIXERR_BASE + 2)


Const MIXER_OBJECTF_HANDLE = &H80000000
Const MIXER_OBJECTF_MIXER = &H0&
Const MIXER_OBJECTF_HMIXER = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_MIXER)
Const MIXER_OBJECTF_WAVEOUT = &H10000000
Const MIXER_OBJECTF_HWAVEOUT = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_WAVEOUT)
Const MIXER_OBJECTF_WAVEIN = &H20000000
Const MIXER_OBJECTF_HWAVEIN = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_WAVEIN)
Const MIXER_OBJECTF_MIDIOUT = &H30000000
Const MIXER_OBJECTF_HMIDIOUT = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_MIDIOUT)
Const MIXER_OBJECTF_MIDIIN = &H40000000
Const MIXER_OBJECTF_HMIDIIN = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_MIDIIN)
Const MIXER_OBJECTF_AUX = &H50000000

Declare Function mixerGetNumDevs Lib "winmm.dll" Alias "mixerGetNumDevs" () As Long

Type MIXERCAPS
        wMid As Integer                   '  id. del fabricante
        wPid As Integer                   '  id. del producto
        vDriverVersion As Long            '  versin del controlador
        szPname As String * MAXPNAMELEN   '  nombre del producto
        fdwSupport As Long                '  bits de soporte de uso general
        cDestinations As Long             '  recuento de destinos
End Type

Declare Function mixerGetDevCaps Lib "winmm.dll" Alias "mixerGetDevCapsA" (ByVal uMxId As Long, ByVal pmxcaps As MIXERCAPS, ByVal cbmxcaps As Long) As Long
Declare Function mixerOpen Lib "winmm.dll" Alias "mixerOpen" (phmx As Long, ByVal uMxId As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal fdwOpen As Long) As Long
Declare Function mixerClose Lib "winmm.dll" Alias "mixerClose" (ByVal hmx As Long) As Long
Declare Function mixerMessage Lib "winmm.dll" Alias "mixerMessage" (ByVal hmx As Long, ByVal uMsg As Long, ByVal dwParam1 As Long, ByVal dwParam2 As Long) As Long

Type Target    ' para usarlo en MIXERLINE y otros (estructura incrustada)
        
        dwType As Long                   '  MIXERLINE_TARGETTYPE_xxxx
        dwDeviceID As Long               '  id. de dispositivo de destino del tipo de dispositivo
        wMid As Integer                  '  del dispositivo de destino
        wPid As Integer                  '       "
        vDriverVersion As Long           '       "
        szPname As String * MAXPNAMELEN
End Type

Type MIXERLINE
        cbStruct As Long               '  tamao de la estructura MIXERLINE
        dwDestination As Long          '  ndice de destino con base cero
        dwSource As Long               '  ndice de origen con base cero (si hay origen)
        dwLineID As Long               '  id. de lnea nica para el dispositivo mezclador
        fdwLine As Long                '  estado e informacin sobre la lnea
        dwUser As Long                 '  informacin especfica del controlador
        dwComponentType As Long        '  la lnea de tipo del componente se conecta a
        cChannels As Long              '  nmero de canales que admite la lnea
        cConnections As Long           '  nmero de conexiones (posibles)
        cControls As Long              '  nmero de controles que hay en esta lnea
        szShortName As String * MIXER_SHORT_NAME_CHARS
        szName As String * MIXER_LONG_NAME_CHARS
        tTarget As Target
End Type

'   MIXERLINE.fdwLine

Const MIXERLINE_LINEF_ACTIVE = &H1&
Const MIXERLINE_LINEF_DISCONNECTED = &H8000&
Const MIXERLINE_LINEF_SOURCE = &H80000000

'   MIXERLINE.dwComponentType

'   tipos de componentes para destinos y orgenes

Const MIXERLINE_COMPONENTTYPE_DST_FIRST = &H0&
Const MIXERLINE_COMPONENTTYPE_DST_UNDEFINED = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 0)
Const MIXERLINE_COMPONENTTYPE_DST_DIGITAL = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 1)
Const MIXERLINE_COMPONENTTYPE_DST_LINE = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 2)
Const MIXERLINE_COMPONENTTYPE_DST_MONITOR = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 3)
Const MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4)
Const MIXERLINE_COMPONENTTYPE_DST_HEADPHONES = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 5)
Const MIXERLINE_COMPONENTTYPE_DST_TELEPHONE = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 6)
Const MIXERLINE_COMPONENTTYPE_DST_WAVEIN = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 7)
Const MIXERLINE_COMPONENTTYPE_DST_VOICEIN = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
Const MIXERLINE_COMPONENTTYPE_DST_LAST = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)

Const MIXERLINE_COMPONENTTYPE_SRC_FIRST = &H1000&
Const MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0)
Const MIXERLINE_COMPONENTTYPE_SRC_DIGITAL = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1)
Const MIXERLINE_COMPONENTTYPE_SRC_LINE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)
Const MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3)
Const MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4)
Const MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5)
Const MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6)
Const MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7)
Const MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8)
Const MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 9)
Const MIXERLINE_COMPONENTTYPE_SRC_ANALOG = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
Const MIXERLINE_COMPONENTTYPE_SRC_LAST = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)


'
'   MIXERLINE.Target.dwType
'
'
Const MIXERLINE_TARGETTYPE_UNDEFINED = 0
Const MIXERLINE_TARGETTYPE_WAVEOUT = 1
Const MIXERLINE_TARGETTYPE_WAVEIN = 2
Const MIXERLINE_TARGETTYPE_MIDIOUT = 3
Const MIXERLINE_TARGETTYPE_MIDIIN = 4
Const MIXERLINE_TARGETTYPE_AUX = 5

Declare Function mixerGetLineInfo Lib "winmm.dll" Alias "mixerGetLineInfoA" (ByVal hmxobj As Long, pmxl As MIXERLINE, ByVal fdwInfo As Long) As Long
Const MIXER_GETLINEINFOF_DESTINATION = &H0&
Const MIXER_GETLINEINFOF_SOURCE = &H1&
Const MIXER_GETLINEINFOF_LINEID = &H2&
Const MIXER_GETLINEINFOF_COMPONENTTYPE = &H3&
Const MIXER_GETLINEINFOF_TARGETTYPE = &H4&
Const MIXER_GETLINEINFOF_QUERYMASK = &HF&

Declare Function mixerGetID Lib "winmm.dll" Alias "mixerGetID" (ByVal hmxobj As Long, pumxID As Long, ByVal fdwId As Long) As Long

'   MIXERCONTROL


Type MIXERCONTROL
        cbStruct As Long           '  tamao en bytes de MIXERCONTROL
        dwControlID As Long        '  id. exclusivo del control para el dispositivo mezclador
        dwControlType As Long      '  MIXERCONTROL_CONTROLTYPE_xxx
        fdwControl As Long         '  MIXERCONTROL_CONTROLF_xxx
        cMultipleItems As Long     '  si se establece MIXERCONTROL_CONTROLF_MULTIPLE 
        szShortName As String * MIXER_SHORT_NAME_CHARS
        szName As String * MIXER_LONG_NAME_CHARS
        Bounds(1 To 6) As Long     '  Miembro ms largo de la unin Bounds
        Metrics(1 To 6) As Long    '  Miembro ms largo de la unin  Metrics
End Type

'
'   MIXERCONTROL.fdwControl

Const MIXERCONTROL_CONTROLF_UNIFORM = &H1&
Const MIXERCONTROL_CONTROLF_MULTIPLE = &H2&
Const MIXERCONTROL_CONTROLF_DISABLED = &H80000000

'   Definiciones de los bloques de generacin MIXERCONTROL_CONTROLTYPE_xxx 

Const MIXERCONTROL_CT_CLASS_MASK = &HF0000000
Const MIXERCONTROL_CT_CLASS_CUSTOM = &H0&
Const MIXERCONTROL_CT_CLASS_METER = &H10000000
Const MIXERCONTROL_CT_CLASS_SWITCH = &H20000000
Const MIXERCONTROL_CT_CLASS_NUMBER = &H30000000
Const MIXERCONTROL_CT_CLASS_SLIDER = &H40000000
Const MIXERCONTROL_CT_CLASS_FADER = &H50000000
Const MIXERCONTROL_CT_CLASS_TIME = &H60000000
Const MIXERCONTROL_CT_CLASS_LIST = &H70000000
Const MIXERCONTROL_CT_SUBCLASS_MASK = &HF000000
Const MIXERCONTROL_CT_SC_SWITCH_BOOLEAN = &H0&
Const MIXERCONTROL_CT_SC_SWITCH_BUTTON = &H1000000
Const MIXERCONTROL_CT_SC_METER_POLLED = &H0&
Const MIXERCONTROL_CT_SC_TIME_MICROSECS = &H0&
Const MIXERCONTROL_CT_SC_TIME_MILLISECS = &H1000000
Const MIXERCONTROL_CT_SC_LIST_SINGLE = &H0&
Const MIXERCONTROL_CT_SC_LIST_MULTIPLE = &H1000000
Const MIXERCONTROL_CT_UNITS_MASK = &HFF0000
Const MIXERCONTROL_CT_UNITS_CUSTOM = &H0&
Const MIXERCONTROL_CT_UNITS_BOOLEAN = &H10000
Const MIXERCONTROL_CT_UNITS_SIGNED = &H20000
Const MIXERCONTROL_CT_UNITS_UNSIGNED = &H30000
Const MIXERCONTROL_CT_UNITS_DECIBELS = &H40000 '  in 10ths
Const MIXERCONTROL_CT_UNITS_PERCENT = &H50000 '  in 10ths
'
'   Tipos de controles que se suelen usar para especificar MIXERCONTROL.dwControlType
'
Const MIXERCONTROL_CONTROLTYPE_CUSTOM = (MIXERCONTROL_CT_CLASS_CUSTOM Or MIXERCONTROL_CT_UNITS_CUSTOM)
Const MIXERCONTROL_CONTROLTYPE_BOOLEANMETER = (MIXERCONTROL_CT_CLASS_METER Or MIXERCONTROL_CT_SC_METER_POLLED Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Const MIXERCONTROL_CONTROLTYPE_SIGNEDMETER = (MIXERCONTROL_CT_CLASS_METER Or MIXERCONTROL_CT_SC_METER_POLLED Or MIXERCONTROL_CT_UNITS_SIGNED)
Const MIXERCONTROL_CONTROLTYPE_PEAKMETER = (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1)
Const MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER = (MIXERCONTROL_CT_CLASS_METER Or MIXERCONTROL_CT_SC_METER_POLLED Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Const MIXERCONTROL_CONTROLTYPE_BOOLEAN = (MIXERCONTROL_CT_CLASS_SWITCH Or MIXERCONTROL_CT_SC_SWITCH_BOOLEAN Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Const MIXERCONTROL_CONTROLTYPE_ONOFF = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 1)
Const MIXERCONTROL_CONTROLTYPE_MUTE = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 2)
Const MIXERCONTROL_CONTROLTYPE_MONO = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 3)
Const MIXERCONTROL_CONTROLTYPE_LOUDNESS = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 4)
Const MIXERCONTROL_CONTROLTYPE_STEREOENH = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 5)
Const MIXERCONTROL_CONTROLTYPE_BUTTON = (MIXERCONTROL_CT_CLASS_SWITCH Or MIXERCONTROL_CT_SC_SWITCH_BUTTON Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Const MIXERCONTROL_CONTROLTYPE_DECIBELS = (MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_DECIBELS)
Const MIXERCONTROL_CONTROLTYPE_SIGNED = (MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_SIGNED)
Const MIXERCONTROL_CONTROLTYPE_UNSIGNED = (MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Const MIXERCONTROL_CONTROLTYPE_PERCENT = (MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_PERCENT)
Const MIXERCONTROL_CONTROLTYPE_SLIDER = (MIXERCONTROL_CT_CLASS_SLIDER Or MIXERCONTROL_CT_UNITS_SIGNED)
Const MIXERCONTROL_CONTROLTYPE_PAN = (MIXERCONTROL_CONTROLTYPE_SLIDER + 1)
Const MIXERCONTROL_CONTROLTYPE_QSOUNDPAN = (MIXERCONTROL_CONTROLTYPE_SLIDER + 2)
Const MIXERCONTROL_CONTROLTYPE_FADER = (MIXERCONTROL_CT_CLASS_FADER Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Const MIXERCONTROL_CONTROLTYPE_VOLUME = (MIXERCONTROL_CONTROLTYPE_FADER + 1)
Const MIXERCONTROL_CONTROLTYPE_BASS = (MIXERCONTROL_CONTROLTYPE_FADER + 2)
Const MIXERCONTROL_CONTROLTYPE_TREBLE = (MIXERCONTROL_CONTROLTYPE_FADER + 3)
Const MIXERCONTROL_CONTROLTYPE_EQUALIZER = (MIXERCONTROL_CONTROLTYPE_FADER + 4)
Const MIXERCONTROL_CONTROLTYPE_SINGLESELECT = (MIXERCONTROL_CT_CLASS_LIST Or MIXERCONTROL_CT_SC_LIST_SINGLE Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Const MIXERCONTROL_CONTROLTYPE_MUX = (MIXERCONTROL_CONTROLTYPE_SINGLESELECT + 1)
Const MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT = (MIXERCONTROL_CT_CLASS_LIST Or MIXERCONTROL_CT_SC_LIST_MULTIPLE Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Const MIXERCONTROL_CONTROLTYPE_MIXER = (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT + 1)
Const MIXERCONTROL_CONTROLTYPE_MICROTIME = (MIXERCONTROL_CT_CLASS_TIME Or MIXERCONTROL_CT_SC_TIME_MICROSECS Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Const MIXERCONTROL_CONTROLTYPE_MILLITIME = (MIXERCONTROL_CT_CLASS_TIME Or MIXERCONTROL_CT_SC_TIME_MILLISECS Or MIXERCONTROL_CT_UNITS_UNSIGNED)
'
'   MIXERLINECONTROLS
'
Type MIXERLINECONTROLS
        cbStruct As Long       '  tamao en bytes de MIXERLINECONTROLS
        dwLineID As Long       '  id. de lnea (desde MIXERLINE.dwLineID)
                                             '  MIXER_GETLINECONTROLSF_ONEBYID o
        dwControl As Long  '  MIXER_GETLINECONTROLSF_ONEBYTYPE
        cControls As Long      '  recuento de puntos pmxctrl de los controles para
        cbmxctrl As Long       '  el tamao en bytes de _un_ MIXERCONTROL
        pamxctrl As MIXERCONTROL       '  puntero a la primera matriz MIXERCONTROL 
End Type

Declare Function mixerGetLineControls Lib "winmm.dll" Alias "mixerGetLineControlsA" (ByVal hmxobj As Long, pmxlc As MIXERLINECONTROLS, ByVal fdwControls As Long) As Long

Const MIXER_GETLINECONTROLSF_ALL = &H0&
Const MIXER_GETLINECONTROLSF_ONEBYID = &H1&
Const MIXER_GETLINECONTROLSF_ONEBYTYPE = &H2&
Const MIXER_GETLINECONTROLSF_QUERYMASK = &HF&

Type MIXERCONTROLDETAILS
        cbStruct As Long       '  tamao en bytes de MIXERCONTROLDETAILS
        dwControlID As Long    '  id. del control para obtener/establecer detalles sobre
        cChannels As Long      '  nmero de canales contenidos en la matriz paDetails
        item As Long                           ' hwndOwner o cMultipleItems
        cbDetails As Long      '  tamao de la estructura de_un_detalle_XX
        paDetails As Long      '  puntero que indica una matriz de estructuras de los detalles_XX
End Type

'   MIXER_GETCONTROLDETAILSF_LISTTEXT

Type MIXERCONTROLDETAILS_LISTTEXT
        dwParam1 As Long
        dwParam2 As Long
        szName As String * MIXER_LONG_NAME_CHARS
End Type

'   MIXER_GETCONTROLDETAILSF_VALUE

Type MIXERCONTROLDETAILS_BOOLEAN
        fValue As Long
End Type

Type MIXERCONTROLDETAILS_SIGNED
        lValue As Long
End Type

Type MIXERCONTROLDETAILS_UNSIGNED
        dwValue As Long
End Type

Declare Function mixerGetControlDetails Lib "winmm.dll" Alias "mixerGetControlDetailsA" (ByVal hmxobj As Long, pmxcd As MIXERCONTROLDETAILS, ByVal fdwDetails As Long) As Long

Const MIXER_GETCONTROLDETAILSF_VALUE = &H0&
Const MIXER_GETCONTROLDETAILSF_LISTTEXT = &H1&
Const MIXER_GETCONTROLDETAILSF_QUERYMASK = &HF&

Declare Function mixerSetControlDetails Lib "winmm.dll" Alias "mixerSetControlDetails" (ByVal hmxobj As Long, pmxcd As MIXERCONTROLDETAILS, ByVal fdwDetails As Long) As Long

Const MIXER_SETCONTROLDETAILSF_VALUE = &H0&
Const MIXER_SETCONTROLDETAILSF_CUSTOM = &H1&
Const MIXER_SETCONTROLDETAILSF_QUERYMASK = &HF&

'  constantes que se usan con JOYINFOEX
Const JOY_BUTTON5 = &H10&
Const JOY_BUTTON6 = &H20&
Const JOY_BUTTON7 = &H40&
Const JOY_BUTTON8 = &H80&
Const JOY_BUTTON9 = &H100&
Const JOY_BUTTON10 = &H200&
Const JOY_BUTTON11 = &H400&
Const JOY_BUTTON12 = &H800&
Const JOY_BUTTON13 = &H1000&
Const JOY_BUTTON14 = &H2000&
Const JOY_BUTTON15 = &H4000&
Const JOY_BUTTON16 = &H8000&
Const JOY_BUTTON17 = &H10000
Const JOY_BUTTON18 = &H20000
Const JOY_BUTTON19 = &H40000
Const JOY_BUTTON20 = &H80000
Const JOY_BUTTON21 = &H100000
Const JOY_BUTTON22 = &H200000
Const JOY_BUTTON23 = &H400000
Const JOY_BUTTON24 = &H800000
Const JOY_BUTTON25 = &H1000000
Const JOY_BUTTON26 = &H2000000
Const JOY_BUTTON27 = &H4000000
Const JOY_BUTTON28 = &H8000000
Const JOY_BUTTON29 = &H10000000
Const JOY_BUTTON30 = &H20000000
Const JOY_BUTTON31 = &H40000000
Const JOY_BUTTON32 = &H80000000

'  constantes que se usan con la estructura JOYINFOEX 
Const JOY_POVCENTERED = -1
Const JOY_POVFORWARD = 0
Const JOY_POVRIGHT = 9000
Const JOY_POVBACKWARD = 18000
Const JOY_POVLEFT = 27000
Const JOY_RETURNX = &H1&
Const JOY_RETURNY = &H2&
Const JOY_RETURNZ = &H4&
Const JOY_RETURNR = &H8&
Const JOY_RETURNU = &H10                             '  eje 5
Const JOY_RETURNV = &H20                             '  eje 6
Const JOY_RETURNPOV = &H40&
Const JOY_RETURNBUTTONS = &H80&
Const JOY_RETURNRAWDATA = &H100&
Const JOY_RETURNPOVCTS = &H200&
Const JOY_RETURNCENTERED = &H400&
Const JOY_USEDEADZONE = &H800&
Const JOY_RETURNALL = (JOY_RETURNX Or JOY_RETURNY Or JOY_RETURNZ Or JOY_RETURNR Or JOY_RETURNU Or JOY_RETURNV Or JOY_RETURNPOV Or JOY_RETURNBUTTONS)
Const JOY_CAL_READALWAYS = &H10000
Const JOY_CAL_READXYONLY = &H20000
Const JOY_CAL_READ3 = &H40000
Const JOY_CAL_READ4 = &H80000
Const JOY_CAL_READXONLY = &H100000
Const JOY_CAL_READYONLY = &H200000
Const JOY_CAL_READ5 = &H400000
Const JOY_CAL_READ6 = &H800000
Const JOY_CAL_READZONLY = &H1000000
Const JOY_CAL_READRONLY = &H2000000
Const JOY_CAL_READUONLY = &H4000000
Const JOY_CAL_READVONLY = &H8000000

Declare Function joyGetPos Lib "winmm.dll" Alias "joyGetPos" (ByVal uJoyID As Long, pji As JOYINFO) As Long
Declare Function joyGetPosEx Lib "winmm.dll" Alias "joyGetPosEx" (ByVal uJoyID As Long, pji As JOYINFOEX) As Long
Const WAVE_FORMAT_QUERY = &H1
Const SND_PURGE = &H40               '  depura los eventos no estticos para la tarea
Const SND_APPLICATION = &H80         '  busca la asociacin especfica de la aplicacin
Const WAVE_MAPPED = &H4
Const WAVE_FORMAT_DIRECT = &H8
Const WAVE_FORMAT_DIRECT_QUERY = (WAVE_FORMAT_QUERY Or WAVE_FORMAT_DIRECT)
Const MIM_MOREDATA = MM_MIM_MOREDATA
Const MOM_POSITIONCB = MM_MOM_POSITIONCB

'  flags for dwFlags parm of midiInOpen()
Const MIDI_IO_STATUS = &H20&

Declare Function midiStreamOpen Lib "winmm.dll" Alias "midiStreamOpen" (phms As Long, puDeviceID As Long, ByVal cMidi As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal fdwOpen As Long) As Long
Declare Function midiStreamClose Lib "winmm.dll" Alias "midiStreamClose" (ByVal hms As Long) As Long

Declare Function midiStreamProperty Lib "winmm.dll" Alias "midiStreamProperty" (ByVal hms As Long, lppropdata As Byte, ByVal dwProperty As Long) As Long
Declare Function midiStreamPosition Lib "winmm.dll" Alias "midiStreamPosition" (ByVal hms As Long, lpmmt As MMTIME, ByVal cbmmt As Long) As Long
Declare Function midiStreamOut Lib "winmm.dll" Alias "midiStreamOut" (ByVal hms As Long, pmh As MIDIHDR, ByVal cbmh As Long) As Long
Declare Function midiStreamPause Lib "winmm.dll" Alias "midiStreamPause" (ByVal hms As Long) As Long
Declare Function midiStreamRestart Lib "winmm.dll" Alias "midiStreamRestart" (ByVal hms As Long) As Long
Declare Function midiStreamStop Lib "winmm.dll" Alias "midiStreamStop" (ByVal hms As Long) As Long
Declare Function midiConnect Lib "winmm.dll" Alias "midiConnect" (ByVal hmi As Long, ByVal hmo As Long, pReserved As Any) As Long
Declare Function midiDisconnect Lib "winmm.dll" Alias "midiDisconnect" (ByVal hmi As Long, ByVal hmo As Long, pReserved As Any) As Long

Type JOYINFOEX
        dwSize As Long                 '  tamao de la estructura
        dwFlags As Long                '  indicadores de lo que hay que devolver
        dwXpos As Long                 '  posicin x
        dwYpos As Long                 '  posicin y
        dwZpos As Long                 '  posicin z
        dwRpos As Long                 '  timn/posicin del 4 eje
        dwUpos As Long                 '  posicin del 5 eje
        dwVpos As Long                 '  posicin del 6 eje
        dwButtons As Long              '  estado de los botones
        dwButtonNumber As Long         '  nmero del botn que est presionado ahora
        dwPOV As Long                  '  estado del punto de vista
        dwReserved1 As Long            '  reservado para la comunicacin del controlador winmm
        dwReserved2 As Long            '  reservado para expansin futura
End Type
' Compatibilidad del controlador instalable

' Mensajes del controlador
Const DRV_LOAD = &H1
Const DRV_ENABLE = &H2
Const DRV_OPEN = &H3
Const DRV_CLOSE = &H4
Const DRV_DISABLE = &H5
Const DRV_FREE = &H6
Const DRV_CONFIGURE = &H7
Const DRV_QUERYCONFIGURE = &H8
Const DRV_INSTALL = &H9
Const DRV_REMOVE = &HA
Const DRV_EXITSESSION = &HB
Const DRV_POWER = &HF
Const DRV_RESERVED = &H800
Const DRV_USER = &H4000

Type DRVCONFIGINFO
        dwDCISize As Long
        lpszDCISectionName As String
        lpszDCIAliasName As String
        dnDevNode As Long
End Type

' Valores de retorno admitidos para el mensaje DRV_CONFIGURE 
Const DRVCNF_CANCEL = &H0
Const DRVCNF_OK = &H1
Const DRVCNF_RESTART = &H2

'  valores de retorno desde la funcin DriverProc()
Const DRV_CANCEL = DRVCNF_CANCEL
Const DRV_OK = DRVCNF_OK
Const DRV_RESTART = DRVCNF_RESTART

Declare Function CloseDriver Lib "winmm.dll" Alias "CloseDriver" (ByVal hDriver As Long, ByVal lParam1 As Long, ByVal lParam2 As Long) As Long
Declare Function OpenDriver Lib "winmm.dll" Alias "OpenDriver" (ByVal szDriverName As String, ByVal szSectionName As String, ByVal lParam2 As Long) As Long
Declare Function SendDriverMessage Lib "winmm.dll" Alias "SendDriverMessage" (ByVal hDriver As Long, ByVal message As Long, ByVal lParam1 As Long, ByVal lParam2 As Long) As Long
Declare Function DrvGetModuleHandle Lib "winmm.dll" Alias "DrvGetModuleHandle" (ByVal hDriver As Long) As Long
Declare Function GetDriverModuleHandle Lib "winmm.dll" Alias "GetDriverModuleHandle" (ByVal hDriver As Long) As Long
Declare Function DefDriverProc Lib "winmm.dll" Alias "DefDriverProc" (ByVal dwDriverIdentifier As Long, ByVal hdrvr As Long, ByVal uMsg As Long, ByVal lParam1 As Long, ByVal lParam2 As Long) As Long

Const DRV_MCI_FIRST = DRV_RESERVED
Const DRV_MCI_LAST = DRV_RESERVED + &HFFF

' Compatibilidad de devolucin de llamada del controlador

'  indicadores que se usan con waveOutOpen(), waveInOpen(), midiInOpen() y
'  midiOutOpen() para especificar el tipo del parmetro dwCallback.
Const CALLBACK_TYPEMASK = &H70000      '  mscara del tipo de devolucin de llamada
Const CALLBACK_NULL = &H0              '  sin devolucin de llamada
Const CALLBACK_WINDOW = &H10000        '  dwCallback es un HWND
Const CALLBACK_TASK = &H20000          '  dwCallback es un HTASK
Const CALLBACK_FUNCTION = &H30000      '  dwCallback es un FARPROC

'  Id. de los fabricantes
Const MM_MICROSOFT = 1  '  Microsoft Corp.

'  Id. de los productos
Const MM_MIDI_MAPPER = 1  '  MIDI Mapper
Const MM_WAVE_MAPPER = 2  '  Wave Mapper

Const MM_SNDBLST_MIDIOUT = 3  '  puerto de salida MIDI de Sound Blaster
Const MM_SNDBLST_MIDIIN = 4   '  puerto de entrada MIDI de Sound Blaster
Const MM_SNDBLST_SYNTH = 5    '  sintetizador interno de Sound Blaster
Const MM_SNDBLST_WAVEOUT = 6  '  salida de forma de onda de Sound Blaster
Const MM_SNDBLST_WAVEIN = 7   '  entrada de forma de onda de Sound Blaster

Const MM_ADLIB = 9  '  cualquier sintetizador compatible con Ad Lib

Const MM_MPU401_MIDIOUT = 10  '  puerto de salida MIDI compatible con MPU401
Const MM_MPU401_MIDIIN = 11   '  puerto de entrada MIDI compatible con MPU401

Const MM_PC_JOYSTICK = 12     '  adaptador del joystick

Declare Function mmsystemGetVersion Lib "winmm.dll" Alias "mmsystemGetVersion" () As Long
Declare Sub OutputDebugStr Lib "winmm.dll" Alias "OutputDebugStr" (ByVal lpszOutputString As String)

Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

'  valores de los indicadores para el parmetro uFlags
Const SND_SYNC = &H0          '  reproduccin sncrona (predeterminado)
Const SND_ASYNC = &H1         '  reproduccin asncrona

Const SND_NODEFAULT = &H2     '  silencio no predeterminado, si no se encuentra sonido

Const SND_MEMORY = &H4        ' lpszSoundName apunta a un archivo de memoria
Const SND_ALIAS = &H10000     '  el nombre es una entrada WIN.INI [sounds]
Const SND_FILENAME = &H20000  '  el nombre es de archivo
Const SND_RESOURCE = &H40004  '  el nombre es de recurso o tomo
Const SND_ALIAS_ID = &H110000 '  el nombre es identificador de entrada de WIN.INI [sounds]

Const SND_ALIAS_START = 0     '  debe ser > 4096 para guardar las cadenas en la misma seccin del archivo de recursos

Const SND_LOOP = &H8          '  bucle de sonido hasta el prximo sndPlaySound
Const SND_NOSTOP = &H10       '  no detiene ningn sonido que se est reproduciendo
Const SND_VALID = &H1F        '  indicadores vlidos          / ;Interno /

Const SND_NOWAIT = &H2000     '  no espera si el controlador est ocupado

Const SND_VALIDFLAGS = &H17201F    '  Conjunto de bits de indicadores vlidos.
                                    ' Cualquier valor que est fuera de este intervalo produce un error
Const SND_RESERVED = &HFF000000  '  Estos indicadores estn reservados especialmente

Const SND_TYPE_MASK = &H170007

Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long

'  valores de retorno de los errores de audio de forma de onda
Const WAVERR_BADFORMAT = (WAVERR_BASE + 0)     '  formato de onda no compatible
Const WAVERR_STILLPLAYING = (WAVERR_BASE + 1)  '  todava reproduce algo
Const WAVERR_UNPREPARED = (WAVERR_BASE + 2)    '  encabezado no preparado
Const WAVERR_SYNC = (WAVERR_BASE + 3)          '  dispositivo sncrono
Const WAVERR_LASTERROR = (WAVERR_BASE + 3)     '  ltimo error del intervalo

'  mensajes de devolucin de llamada de onda
Const WOM_OPEN = MM_WOM_OPEN
Const WOM_CLOSE = MM_WOM_CLOSE
Const WOM_DONE = MM_WOM_DONE
Const WIM_OPEN = MM_WIM_OPEN
Const WIM_CLOSE = MM_WIM_CLOSE
Const WIM_DATA = MM_WIM_DATA

'  Id. del dispositivo para el mapeador de dispositivos de onda
Const WAVE_MAPPER = -1&

'  indicadores para el parmetro dwFlags de waveOutOpen() y waveInOpen()

Const WAVE_ALLOWSYNC = &H2
Const WAVE_VALID = &H3         '  ;Interno

Type WAVEHDR
        lpData As String
        dwBufferLength As Long
        dwBytesRecorded As Long
        dwUser As Long
        dwFlags As Long
        dwLoops As Long
        lpNext As Long
        Reserved As Long
End Type

'  indicadores para el campo dwFlags de WAVEHDR
Const WHDR_DONE = &H1         '  bit terminado
Const WHDR_PREPARED = &H2     '  establece si se ha preparado este encabezado
Const WHDR_BEGINLOOP = &H4    '  bucle del bloque de inicio
Const WHDR_ENDLOOP = &H8      '  bucle del bloque final
Const WHDR_INQUEUE = &H10     '  reservado para el controlador
Const WHDR_VALID = &H1F       '  indicadores vlidos      / ;Interno /

Type WAVEOUTCAPS
        wMid As Integer
        wPid As Integer
        vDriverVersion As Long
        szPname As String * MAXPNAMELEN
        dwFormats As Long
        wChannels As Integer
        dwSupport As Long
End Type

'  indicadores para el campo dwSupport de WAVEOUTCAPS
Const WAVECAPS_PITCH = &H1         '  admite control de tono
Const WAVECAPS_PLAYBACKRATE = &H2  '  admite control de velocidad de reproduccin
Const WAVECAPS_VOLUME = &H4        '  admite control de volumen
Const WAVECAPS_LRVOLUME = &H8      '  control separado de volumen derecho e izquierdo
Const WAVECAPS_SYNC = &H10

Type WAVEINCAPS
        wMid As Integer
        wPid As Integer
        vDriverVersion As Long
        szPname As String * MAXPNAMELEN
        dwFormats As Long
        wChannels As Integer
End Type

'  definiciones para el campo dwFormat de WAVEINCAPS y WAVEOUTCAPS
Const WAVE_INVALIDFORMAT = &H0            '  formato no vlido
Const WAVE_FORMAT_1M08 = &H1              '  11,025 KHz, Mono,   8 bits
Const WAVE_FORMAT_1S08 = &H2              '  11,025 KHz, Estreo, 8 bitss
Const WAVE_FORMAT_1M16 = &H4              '  11,025 KHz, Mono,   16 bits
Const WAVE_FORMAT_1S16 = &H8              '  11,025 KHz, Estreo, 16 bits
Const WAVE_FORMAT_2M08 = &H10             '  22,05  KHz, Mono,   8 bits
Const WAVE_FORMAT_2S08 = &H20             '  22,05  KHz, Estreo, 8 bits
Const WAVE_FORMAT_2M16 = &H40             '  22,05  KHz, Mono,   16 bits
Const WAVE_FORMAT_2S16 = &H80             '  22,05  KHz, Estreo, 16 bits
Const WAVE_FORMAT_4M08 = &H100            '  44,1   KHz, Mono,   8 bits
Const WAVE_FORMAT_4S08 = &H200            '  44,1   KHz, Estreo, 8 bits
Const WAVE_FORMAT_4M16 = &H400            '  44,1   KHz, Mono,   16 bits
Const WAVE_FORMAT_4S16 = &H800            '  44,1   KHz, Estreo, 16 bits

'  indicadores para el campo wFormatTag de WAVEFORMAT
Const WAVE_FORMAT_PCM = 1  '  Necesario en archivos de recursos para #ifndef RC_INVOKED

Type WAVEFORMAT
        wFormatTag As Integer
        nChannels As Integer
        nSamplesPerSec As Long
        nAvgBytesPerSec As Long
        nBlockAlign As Integer
End Type

Type PCMWAVEFORMAT
        wf As WAVEFORMAT
        wBitsPerSample As Integer
End Type

Declare Function waveOutGetNumDevs Lib "winmm.dll" Alias "waveOutGetNumDevs" () As Long
Declare Function waveOutGetDevCaps Lib "winmm.dll" Alias "waveOutGetDevCapsA" (ByVal uDeviceID As Long, lpCaps As WAVEOUTCAPS, ByVal uSize As Long) As Long

Declare Function waveOutGetVolume Lib "winmm.dll" Alias "waveOutGetVolume" (ByVal uDeviceID As Long, lpdwVolume As Long) As Long
Declare Function waveOutSetVolume Lib "winmm.dll" Alias "waveOutSetVolume" (ByVal uDeviceID As Long, ByVal dwVolume As Long) As Long

Declare Function waveOutGetErrorText Lib "winmm.dll" Alias "waveOutGetErrorTextA" (ByVal err As Long, ByVal lpText As String, ByVal uSize As Long) As Long

Declare Function waveOutOpen Lib "winmm.dll" Alias "waveOutOpen" (lphWaveOut As Long, ByVal uDeviceID As Long, lpFormat As WAVEFORMAT, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Declare Function waveOutClose Lib "winmm.dll" Alias "waveOutClose" (ByVal hWaveOut As Long) As Long
Declare Function waveOutPrepareHeader Lib "winmm.dll" Alias "waveOutPrepareHeader" (ByVal hWaveOut As Long, lpWaveOutHdr As WAVEHDR, ByVal uSize As Long) As Long
Declare Function waveOutUnprepareHeader Lib "winmm.dll" Alias "waveOutUnprepareHeader" (ByVal hWaveOut As Long, lpWaveOutHdr As WAVEHDR, ByVal uSize As Long) As Long
Declare Function waveOutWrite Lib "winmm.dll" Alias "waveOutWrite" (ByVal hWaveOut As Long, lpWaveOutHdr As WAVEHDR, ByVal uSize As Long) As Long
Declare Function waveOutPause Lib "winmm.dll" Alias "waveOutPause" (ByVal hWaveOut As Long) As Long
Declare Function waveOutRestart Lib "winmm.dll" Alias "waveOutRestart" (ByVal hWaveOut As Long) As Long
Declare Function waveOutReset Lib "winmm.dll" Alias "waveOutReset" (ByVal hWaveOut As Long) As Long
Declare Function waveOutBreakLoop Lib "winmm.dll" Alias "waveOutBreakLoop" (ByVal hWaveOut As Long) As Long
Declare Function waveOutGetPosition Lib "winmm.dll" Alias "waveOutGetPosition" (ByVal hWaveOut As Long, lpInfo As MMTIME, ByVal uSize As Long) As Long
Declare Function waveOutGetPitch Lib "winmm.dll" Alias "waveOutGetPitch" (ByVal hWaveOut As Long, lpdwPitch As Long) As Long
Declare Function waveOutSetPitch Lib "winmm.dll" Alias "waveOutSetPitch" (ByVal hWaveOut As Long, ByVal dwPitch As Long) As Long
Declare Function waveOutGetPlaybackRate Lib "winmm.dll" Alias "waveOutGetPlaybackRate" (ByVal hWaveOut As Long, lpdwRate As Long) As Long
Declare Function waveOutSetPlaybackRate Lib "winmm.dll" Alias "waveOutSetPlaybackRate" (ByVal hWaveOut As Long, ByVal dwRate As Long) As Long
Declare Function waveOutGetID Lib "winmm.dll" Alias "waveOutGetID" (ByVal hWaveOut As Long, lpuDeviceID As Long) As Long
Declare Function waveOutMessage Lib "winmm.dll" Alias "waveOutMessage" (ByVal hWaveOut As Long, ByVal msg As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long
Declare Function waveInGetNumDevs Lib "winmm.dll" Alias "waveInGetNumDevs" () As Long

Declare Function waveInGetDevCaps Lib "winmm.dll" Alias "waveInGetDevCapsA" (ByVal uDeviceID As Long, lpCaps As WAVEINCAPS, ByVal uSize As Long) As Long

Declare Function waveInGetErrorText Lib "winmm.dll" Alias "waveInGetErrorTextA" (ByVal err As Long, ByVal lpText As String, ByVal uSize As Long) As Long

Declare Function waveInOpen Lib "winmm.dll" Alias "waveInOpen" (lphWaveIn As Long, ByVal uDeviceID As Long, lpFormat As WAVEFORMAT, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Declare Function waveInClose Lib "winmm.dll" Alias "waveInClose" (ByVal hWaveIn As Long) As Long
Declare Function waveInPrepareHeader Lib "winmm.dll" Alias "waveInPrepareHeader" (ByVal hWaveIn As Long, lpWaveInHdr As WAVEHDR, ByVal uSize As Long) As Long
Declare Function waveInUnprepareHeader Lib "winmm.dll" Alias "waveInUnprepareHeader" (ByVal hWaveIn As Long, lpWaveInHdr As WAVEHDR, ByVal uSize As Long) As Long
Declare Function waveInAddBuffer Lib "winmm.dll" Alias "waveInAddBuffer" (ByVal hWaveIn As Long, lpWaveInHdr As WAVEHDR, ByVal uSize As Long) As Long
Declare Function waveInStart Lib "winmm.dll" Alias "waveInStart" (ByVal hWaveIn As Long) As Long
Declare Function waveInStop Lib "winmm.dll" Alias "waveInStop" (ByVal hWaveIn As Long) As Long
Declare Function waveInReset Lib "winmm.dll" Alias "waveInReset" (ByVal hWaveIn As Long) As Long
Declare Function waveInGetPosition Lib "winmm.dll" Alias "waveInGetPosition" (ByVal hWaveIn As Long, lpInfo As MMTIME, ByVal uSize As Long) As Long
Declare Function waveInGetID Lib "winmm.dll" Alias "waveInGetID" (ByVal hWaveIn As Long, lpuDeviceID As Long) As Long
Declare Function waveInMessage Lib "winmm.dll" Alias "waveInMessage" (ByVal hWaveIn As Long, ByVal msg As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long

'  Valores de retorno de los errores de MIDI 
Const MIDIERR_UNPREPARED = (MIDIERR_BASE + 0)   '  encabezado no preparado 
Const MIDIERR_STILLPLAYING = (MIDIERR_BASE + 1) '  an se est reproduciendo algo
Const MIDIERR_NOMAP = (MIDIERR_BASE + 2)        '  no hay mapa activo 
Const MIDIERR_NOTREADY = (MIDIERR_BASE + 3)     '  el hardware est ocupado 
Const MIDIERR_NODEVICE = (MIDIERR_BASE + 4)     '  el puerto ya no est conectado 
Const MIDIERR_INVALIDSETUP = (MIDIERR_BASE + 5) '  configuracin no vlida 
Const MIDIERR_LASTERROR = (MIDIERR_BASE + 5)    '  ltimo error del intervalo 

'  Mensajes de devolucin de llamada de MIDI 
Const MIM_OPEN = MM_MIM_OPEN
Const MIM_CLOSE = MM_MIM_CLOSE
Const MIM_DATA = MM_MIM_DATA
Const MIM_LONGDATA = MM_MIM_LONGDATA
Const MIM_ERROR = MM_MIM_ERROR
Const MIM_LONGERROR = MM_MIM_LONGERROR
Const MOM_OPEN = MM_MOM_OPEN
Const MOM_CLOSE = MM_MOM_CLOSE
Const MOM_DONE = MM_MOM_DONE

'  Id. de dispositivo para el mapeador MIDI 
Const MIDIMAPPER = (-1)  '  Imposible establecer a DWORD porque RC da error
Const MIDI_MAPPER = -1&

'  indicadores para el parmetro wFlags de midiOutCachePatches(), midiOutCacheDrumPatches()
Const MIDI_CACHE_ALL = 1
Const MIDI_CACHE_BESTFIT = 2
Const MIDI_CACHE_QUERY = 3
Const MIDI_UNCACHE = 4
Const MIDI_CACHE_VALID = (MIDI_CACHE_ALL Or MIDI_CACHE_BESTFIT Or MIDI_CACHE_QUERY Or MIDI_UNCACHE)  '  ;Interno

Type MIDIOUTCAPS
        wMid As Integer
        wPid As Integer
        vDriverVersion As Long
        szPname As String * MAXPNAMELEN
        wTechnology As Integer
        wVoices As Integer
        wNotes As Integer
        wChannelMask As Integer
        dwSupport As Long
End Type

'  indicadores para el campo wTechnology de la estructura MIDIOUTCAPS
Const MOD_MIDIPORT = 1  '  puerto de salida 
Const MOD_SYNTH = 2     '  sintetizador interno genrico 
Const MOD_SQSYNTH = 3   '  sintetizador interno de onda rectangular 
Const MOD_FMSYNTH = 4   '  sintetizador interno FM 
Const MOD_MAPPER = 5    '  mapeador MIDI 

'  indicadores para el campo dwSupport de MIDIOUTCAPS
Const MIDICAPS_VOLUME = &H1         '  admite control de volumen
Const MIDICAPS_LRVOLUME = &H2       '  separa controles de volumen izquierdo y derecho
Const MIDICAPS_CACHE = &H4

Type MIDIINCAPS
        wMid As Integer
        wPid As Integer
        vDriverVersion As Long
        szPname As String * MAXPNAMELEN
End Type

Type MIDIHDR
        lpData As String
        dwBufferLength As Long
        dwBytesRecorded As Long
        dwUser As Long
        dwFlags As Long
        lpNext As Long
        Reserved As Long
End Type

'  indicadores para el campo dwFlags de la estructura MIDIHDR 
Const MHDR_DONE = &H1         '  bit terminado
Const MHDR_PREPARED = &H2     '  establece si el encabezado est preparado 
Const MHDR_INQUEUE = &H4      '  reservado para el controlador 
Const MHDR_VALID = &H7        '  indicadores vlidos / ;Interno /

Declare Function midiOutGetDevCaps Lib "winmm.dll" Alias "midiOutGetDevCapsA" (ByVal uDeviceID As Long, lpCaps As MIDIOUTCAPS, ByVal uSize As Long) As Long

Declare Function midiOutGetVolume Lib "winmm.dll" Alias "midiOutGetVolume" (ByVal uDeviceID As Long, lpdwVolume As Long) As Long
Declare Function midiOutSetVolume Lib "winmm.dll" Alias "midiOutSetVolume" (ByVal uDeviceID As Long, ByVal dwVolume As Long) As Long

Declare Function midiOutGetErrorText Lib "winmm.dll" Alias "midiOutGetErrorTextA" (ByVal err As Long, ByVal lpText As String, ByVal uSize As Long) As Long

Declare Function midiOutOpen Lib "winmm.dll" Alias "midiOutOpen" (lphMidiOut As Long, ByVal uDeviceID As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Declare Function midiOutClose Lib "winmm.dll" Alias "midiOutClose" (ByVal hMidiOut As Long) As Long
Declare Function midiOutPrepareHeader Lib "winmm.dll" Alias "midiOutPrepareHeader" (ByVal hMidiOut As Long, lpMidiOutHdr As MIDIHDR, ByVal uSize As Long) As Long
Declare Function midiOutUnprepareHeader Lib "winmm.dll" Alias "midiOutUnprepareHeader" (ByVal hMidiOut As Long, lpMidiOutHdr As MIDIHDR, ByVal uSize As Long) As Long
Declare Function midiOutShortMsg Lib "winmm.dll" Alias "midiOutShortMsg" (ByVal hMidiOut As Long, ByVal dwMsg As Long) As Long
Declare Function midiOutLongMsg Lib "winmm.dll" Alias "midiOutLongMsg" (ByVal hMidiOut As Long, lpMidiOutHdr As MIDIHDR, ByVal uSize As Long) As Long
Declare Function midiOutReset Lib "winmm.dll" Alias "midiOutReset" (ByVal hMidiOut As Long) As Long
Declare Function midiOutCachePatches Lib "winmm.dll" Alias "midiOutCachePatches" (ByVal hMidiOut As Long, ByVal uBank As Long, lpPatchArray As Long, ByVal uFlags As Long) As Long
Declare Function midiOutCacheDrumPatches Lib "winmm.dll" Alias "midiOutCacheDrumPatches" (ByVal hMidiOut As Long, ByVal uPatch As Long, lpKeyArray As Long, ByVal uFlags As Long) As Long
Declare Function midiOutGetID Lib "winmm.dll" Alias "midiOutGetID" (ByVal hMidiOut As Long, lpuDeviceID As Long) As Long
Declare Function midiOutMessage Lib "winmm.dll" Alias "midiOutMessage" (ByVal hMidiOut As Long, ByVal msg As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long
Declare Function midiInGetNumDevs Lib "winmm.dll" Alias "midiInGetNumDevs" () As Long

Declare Function midiInGetDevCaps Lib "winmm.dll" Alias "midiInGetDevCapsA" (ByVal uDeviceID As Long, lpCaps As MIDIINCAPS, ByVal uSize As Long) As Long

Declare Function midiInGetErrorText Lib "winmm.dll" Alias "midiInGetErrorTextA" (ByVal err As Long, ByVal lpText As String, ByVal uSize As Long) As Long

Declare Function midiInOpen Lib "winmm.dll" Alias "midiInOpen" (lphMidiIn As Long, ByVal uDeviceID As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Declare Function midiInClose Lib "winmm.dll" Alias "midiInClose" (ByVal hMidiIn As Long) As Long
Declare Function midiInPrepareHeader Lib "winmm.dll" Alias "midiInPrepareHeader" (ByVal hMidiIn As Long, lpMidiInHdr As MIDIHDR, ByVal uSize As Long) As Long
Declare Function midiInUnprepareHeader Lib "winmm.dll" Alias "midiInUnprepareHeader" (ByVal hMidiIn As Long, lpMidiInHdr As MIDIHDR, ByVal uSize As Long) As Long
Declare Function midiInAddBuffer Lib "winmm.dll" Alias "midiInAddBuffer" (ByVal hMidiIn As Long, lpMidiInHdr As MIDIHDR, ByVal uSize As Long) As Long
Declare Function midiInStart Lib "winmm.dll" Alias "midiInStart" (ByVal hMidiIn As Long) As Long
Declare Function midiInStop Lib "winmm.dll" Alias "midiInStop" (ByVal hMidiIn As Long) As Long
Declare Function midiInReset Lib "winmm.dll" Alias "midiInReset" (ByVal hMidiIn As Long) As Long
Declare Function midiInGetID Lib "winmm.dll" Alias "midiInGetID" (ByVal hMidiIn As Long, lpuDeviceID As Long) As Long
Declare Function midiInMessage Lib "winmm.dll" Alias "midiInMessage" (ByVal hMidiIn As Long, ByVal msg As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long

'  Id. de dispositivo para el asignador de dispositivo auxiliar 
Const AUX_MAPPER = -1&

Type AUXCAPS
        wMid As Integer
        wPid As Integer
        vDriverVersion As Long
        szPname As String * MAXPNAMELEN
        wTechnology As Integer
        dwSupport As Long
End Type

'  indicadores para el campo wTechnology de la estructura AUXCAPS 
Const AUXCAPS_CDAUDIO = 1  '  audio desde la unidad de CD-ROM interna
Const AUXCAPS_AUXIN = 2    '  audio desde los conectores auxiliares de entrada 

'  indicadores para el campo dwSupport de la estructura AUXCAPS 
Const AUXCAPS_VOLUME = &H1         '  admite control de volumen
Const AUXCAPS_LRVOLUME = &H2       '  separa los controles de volumen izquierdo y derecho

Declare Function auxGetNumDevs Lib "winmm.dll" Alias "auxGetNumDevs" () As Long
Declare Function auxGetDevCaps Lib "winmm.dll" Alias "auxGetDevCapsA" (ByVal uDeviceID As Long, lpCaps As AUXCAPS, ByVal uSize As Long) As Long

Declare Function auxSetVolume Lib "winmm.dll" Alias "auxSetVolume" (ByVal uDeviceID As Long, ByVal dwVolume As Long) As Long
Declare Function auxGetVolume Lib "winmm.dll" Alias "auxGetVolume" (ByVal uDeviceID As Long, lpdwVolume As Long) As Long
Declare Function auxOutMessage Lib "winmm.dll" Alias "auxOutMessage" (ByVal uDeviceID As Long, ByVal msg As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long

'  Valores de retorno de los errores del cronmetro 
Const TIMERR_NOERROR = (0)  '  ningn error
Const TIMERR_NOCANDO = (TIMERR_BASE + 1) '  peticin no terminada 
Const TIMERR_STRUCT = (TIMERR_BASE + 33) '  tamao de la estructura de hora 

'  indicadores para el parmetro wFlags de la funcin timeSetEvent() 
Const TIME_ONESHOT = 0   '  cronmetro del programa para eventos nicos
Const TIME_PERIODIC = 1  '  programa para eventos peridicos continuos

Type TIMECAPS
        wPeriodMin As Long
        wPeriodMax As Long
End Type

Declare Function timeGetSystemTime Lib "winmm.dll" Alias "timeGetSystemTime" (lpTime As MMTIME, ByVal uSize As Long) As Long
Declare Function timeGetTime Lib "winmm.dll" Alias "timeGetTime" () As Long
Declare Function timeSetEvent Lib "winmm.dll" Alias "timeSetEvent" (ByVal uDelay As Long, ByVal uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long
Declare Function timeKillEvent Lib "winmm.dll" Alias "timeKillEvent" (ByVal uID As Long) As Long
Declare Function timeGetDevCaps Lib "winmm.dll" Alias "timeGetDevCaps" (lpTimeCaps As TIMECAPS, ByVal uSize As Long) As Long
Declare Function timeBeginPeriod Lib "winmm.dll" Alias "timeBeginPeriod" (ByVal uPeriod As Long) As Long
Declare Function timeEndPeriod Lib "winmm.dll" Alias "timeEndPeriod" (ByVal uPeriod As Long) As Long

'  Valores de retorno de errores del joystick 
Const JOYERR_NOERROR = (0)  '  ningn error
Const JOYERR_PARMS = (JOYERR_BASE + 5)     ' parmetros incorrectos
Const JOYERR_NOCANDO = (JOYERR_BASE + 6)   '  peticin no completada 
Const JOYERR_UNPLUGGED = (JOYERR_BASE + 7) '  el joystick est desconectado 

'  constantes utilizadas con la estructura JOYINFO y mensajes MM_JOY 
Const JOY_BUTTON1 = &H1
Const JOY_BUTTON2 = &H2
Const JOY_BUTTON3 = &H4
Const JOY_BUTTON4 = &H8
Const JOY_BUTTON1CHG = &H100
Const JOY_BUTTON2CHG = &H200
Const JOY_BUTTON3CHG = &H400
Const JOY_BUTTON4CHG = &H800

'  constantes de Id. del joystick 
Const JOYSTICKID1 = 0
Const JOYSTICKID2 = 1

Type JOYCAPS
        wMid As Integer
        wPid As Integer
        szPname As String * MAXPNAMELEN
        wXmin As Integer
        wXmax As Integer
        wYmin As Integer
        wYmax As Integer
        wZmin As Integer
        wZmax As Integer
        wNumButtons As Integer
        wPeriodMin As Integer
        wPeriodMax As Integer
End Type

Type JOYINFO
        wXpos As Long
        wYpos As Long
        wZpos As Long
        wButtons As Long
End Type

Declare Function joyGetDevCaps Lib "winmm.dll" Alias "joyGetDevCapsA" (ByVal id As Long, lpCaps As JOYCAPS, ByVal uSize As Long) As Long

Declare Function joyGetNumDevs Lib "winmm.dll" Alias "joyGetNumDev" () As Long
Declare Function joyGetThreshold Lib "winmm.dll" Alias "joyGetThreshold" (ByVal id As Long, lpuThreshold As Long) As Long
Declare Function joyReleaseCapture Lib "winmm.dll" Alias "joyReleaseCapture" (ByVal id As Long) As Long
Declare Function joySetCapture Lib "winmm.dll" Alias "joySetCapture" (ByVal hwnd As Long, ByVal uID As Long, ByVal uPeriod As Long, ByVal bChanged As Long) As Long
Declare Function joySetThreshold Lib "winmm.dll" Alias "joySetThreshold" (ByVal id As Long, ByVal uThreshold As Long) As Long

'  Valores de retorno de los errores de MMIO 
Const MMIOERR_BASE = 256
Const MMIOERR_FILENOTFOUND = (MMIOERR_BASE + 1)  '  archivo no encontrado
Const MMIOERR_OUTOFMEMORY = (MMIOERR_BASE + 2)   '  no hay suficiente memoria
Const MMIOERR_CANNOTOPEN = (MMIOERR_BASE + 3)    '  no se puede abrir
Const MMIOERR_CANNOTCLOSE = (MMIOERR_BASE + 4)   '  no se puede cerrar
Const MMIOERR_CANNOTREAD = (MMIOERR_BASE + 5)    '  no se puede leer
Const MMIOERR_CANNOTWRITE = (MMIOERR_BASE + 6)   '  no se puede escribir
Const MMIOERR_CANNOTSEEK = (MMIOERR_BASE + 7)    '  no se puede buscar
Const MMIOERR_CANNOTEXPAND = (MMIOERR_BASE + 8)  '  no se puede ampliar archivo 
Const MMIOERR_CHUNKNOTFOUND = (MMIOERR_BASE + 9) '  parte no encontrada 
Const MMIOERR_UNBUFFERED = (MMIOERR_BASE + 10)   '  archivo no almacenado en bfer

'  Constantes de MMIO 
Const CFSEPCHAR = "+"  '  carcter separador de nombre de archivo compuesto

Type MMIOINFO
        dwFlags As Long
        fccIOProc As Long
        pIOProc As Long
        wErrorRet As Long
        htask As Long
        cchBuffer As Long
        pchBuffer As String
        pchNext As String
        pchEndRead As String
        pchEndWrite As String
        lBufOffset As Long
        lDiskOffset As Long
        adwInfo(4) As Long
        dwReserved1 As Long
        dwReserved2 As Long
        hmmio As Long
End Type

Const MMIO_RWMODE = &H3         '  mscara para obtener los bits que se usan para abrir 
                                       '  un archivo y leerlo/escribirlo/ambos
Const MMIO_SHAREMODE = &H70     '  nmero de modo de uso compartido de archivos

'  constantes para el campo dwFlags de MMIOINFO
Const MMIO_CREATE = &H1000      '  crea un archivo nuevo (o trunca el archivo)
Const MMIO_PARSE = &H100        '  analiza la ruta de acceso del retorno de un archivo nuevo 
Const MMIO_DELETE = &H200       '  crea un archivo nuevo (o trunca el archivo)
Const MMIO_EXIST = &H4000       '  comprueba que el archivo existe 
Const MMIO_ALLOCBUF = &H10000   '  mmioOpen() debe asignar un bfer 
Const MMIO_GETTEMP = &H20000    '  mmioOpen() debe recuperar el nombre temporal

Const MMIO_DIRTY = &H10000000   '  El bfer de E/S est sucio 
'  MMIO_DIRTY se usa tambin en el campo <dwFlags> de la estructura MMCKINFO 

Const MMIO_OPEN_VALID = &H3FFFF     '  indicadores vlidos para mmioOpen / ;Interno /

'  nmeros de modo de lectura/escritura (campo de bits MMIO_RWMODE)
Const MMIO_READ = &H0          '  abre el archivo slo para lectura
Const MMIO_WRITE = &H1         '  abre el archivo slo para escritura 
Const MMIO_READWRITE = &H2     ' abre el archivo para lectura y escritura

'  nmeros de modo de los archivos compartidos (campo de bits MMIO_SHAREMODE)
Const MMIO_COMPAT = &H0        '  modo de compatibilidad 
Const MMIO_EXCLUSIVE = &H10    '  modo de acceso exclusivo 
Const MMIO_DENYWRITE = &H20    '  deniega la escritura a otros procesos
Const MMIO_DENYREAD = &H30     '  deniega la lectura a otros procesos
Const MMIO_DENYNONE = &H40     '  no deniega nada a otros procesos 

'  indicadores para otras funciones
Const MMIO_FHOPEN = &H10    '  mmioClose(): mantiene abierto el controlador del archivo 
Const MMIO_EMPTYBUF = &H10    '  mmioFlush(): vaca el bfer de E/S 
Const MMIO_TOUPPER = &H10    '  mmioStringToFOURCC(): cambia a maysculas 
Const MMIO_INSTALLPROC = &H10000     '  mmioInstallIOProc(): instala MMIOProc
Const MMIO_PUBLICPROC = &H10000000  '  mmioInstallIOProc: instala globalmente
Const MMIO_UNICODEPROC = &H1000000   '  mmioInstallIOProc(): Unicode MMIOProc
Const MMIO_REMOVEPROC = &H20000     '  mmioInstallIOProc(): quita MMIOProc
Const MMIO_FINDPROC = &H40000     '  mmioInstallIOProc(): encuentra un MMIOProc
Const MMIO_FINDCHUNK = &H10    '  mmioDescend(): encuentra una parte por Id.
Const MMIO_FINDRIFF = &H20    '  mmioDescend(): encuentra una parte de LISTA 
Const MMIO_FINDLIST = &H40    '  mmioDescend():encuentra una parte de RIFF 
Const MMIO_CREATERIFF = &H20    '  mmioCreateChunk(): hace una parte de LISTA 
Const MMIO_CREATELIST = &H40    '  mmioCreateChunk():hace una parte de RIFF

Const MMIO_VALIDPROC = &H11070000  '  vlido para mmioInstallIOProc / ;Interno /

'  nmeros de los mensajes para las funciones del procedimiento de E/S MMIOPROC 
Const MMIOM_READ = MMIO_READ  '  lectura (tiene que ser igual que MMIO_READ)
Const MMIOM_WRITE = MMIO_WRITE  '  escritura (tiene que ser igual que MMIO_WRITE)
Const MMIOM_SEEK = 2  '  busca una posicin nueva en el archivo 
Const MMIOM_OPEN = 3  '  abre un archivo 
Const MMIOM_CLOSE = 4  '  cierra un archivo 
Const MMIOM_WRITEFLUSH = 5  '  escribe y vaca 
Const MMIOM_RENAME = 6  '  cambia el nombre del archivo especificado 
Const MMIOM_USER = &H8000  '  comienzo de los mensajes definidos por el usuario

'  indicadores para mmioSeek()
Const SEEK_SET = 0  '  busca hasta una posicin absoluta 
Const SEEK_CUR = 1  '  busca desde la posicin actual 
Const SEEK_END = 2  '  busca desde el fin del archivo 

'  otras constantes
Const MMIO_DEFAULTBUFFER = 8192  '  tamao predeterminado del bfer 

Type MMCKINFO
    ckid As Long
    ckSize As Long
    fccType As Long
    dwDataOffset As Long
    dwFlags As Long
End Type

Declare Function mmioStringToFOURCC Lib "winmm.dll" Alias "mmioStringToFOURCCA" (ByVal sz As String, ByVal uFlags As Long) As Long

Declare Function mmioOpen Lib "winmm.dll" Alias "mmioOpenA" (ByVal szFileName As String, lpmmioinfo As MMIOINFO, ByVal dwOpenFlags As Long) As Long

Declare Function mmioRename Lib "winmm.dll" Alias "mmioRenameA" (ByVal szFileName As String, ByVal SzNewFileName As String, lpmmioinfo As MMIOINFO, ByVal dwRenameFlags As Long) As Long

Declare Function mmioClose Lib "winmm.dll" Alias "mmioClose" (ByVal hmmio As Long, ByVal uFlags As Long) As Long
Declare Function mmioRead Lib "winmm.dll" Alias "mmioRead" (ByVal hmmio As Long, ByVal pch As String, ByVal cch As Long) As Long
Declare Function mmioWrite Lib "winmm.dll" Alias "mmioWrite" (ByVal hmmio As Long, ByVal pch As String, ByVal cch As Long) As Long
Declare Function mmioSeek Lib "winmm.dll" Alias "mmioSeek" (ByVal hmmio As Long, ByVal lOffset As Long, ByVal iOrigin As Long) As Long
Declare Function mmioGetInfo Lib "winmm.dll" Alias "mmioGetInfo" (ByVal hmmio As Long, lpmmioinfo As MMIOINFO, ByVal uFlags As Long) As Long
Declare Function mmioSetInfo Lib "winmm.dll" Alias "mmioSetInfo" (ByVal hmmio As Long, lpmmioinfo As MMIOINFO, ByVal uFlags As Long) As Long
Declare Function mmioSetBuffer Lib "winmm.dll" Alias "mmioSetBuffer" (ByVal hmmio As Long, ByVal pchBuffer As String, ByVal cchBuffer As Long, ByVal uFlags As Long) As Long
Declare Function mmioFlush Lib "winmm.dll" Alias "mmioFlush" (ByVal hmmio As Long, ByVal uFlags As Long) As Long
Declare Function mmioAdvance Lib "winmm.dll" Alias "mmioAdvance" (ByVal hmmio As Long, lpmmioinfo As MMIOINFO, ByVal uFlags As Long) As Long
Declare Function mmioSendMessage Lib "winmm.dll" Alias "mmioSendMessage" (ByVal hmmio As Long, ByVal uMsg As Long, ByVal lParam1 As Long, ByVal lParam2 As Long) As Long

Declare Function mmioDescend Lib "winmm.dll" Alias "mmioDescend" (ByVal hmmio As Long, lpck As MMCKINFO, lpckParent As MMCKINFO, ByVal uFlags As Long) As Long
Declare Function mmioAscend Lib "winmm.dll" Alias "mmioAscend" (ByVal hmmio As Long, lpck As MMCKINFO, ByVal uFlags As Long) As Long
Declare Function mmioCreateChunk Lib "winmm.dll" Alias "mmioCreateChunk" (ByVal hmmio As Long, lpck As MMCKINFO, ByVal uFlags As Long) As Long

' Funciones de MCI 

Declare Function mciSendCommand Lib "winmm.dll" Alias "mciSendCommandA" (ByVal wDeviceID As Long, ByVal uMessage As Long, ByVal dwParam1 As Long, ByVal dwParam2 As Any) As Long

Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Declare Function mciGetCreatorTask Lib "winmm.dll" Alias "mciGetCreatorTask" (ByVal wDeviceID As Long) As Long

Declare Function mciGetDeviceID Lib "winmm.dll" Alias "mciGetDeviceIDA" (ByVal lpstrName As String) As Long

Declare Function mciGetDeviceIDFromElementID Lib "winmm.dll" Alias "mciGetDeviceIDFromElementIDA" (ByVal dwElementID As Long, ByVal lpstrType As String) As Long

Declare Function mciGetErrorString Lib "winmm.dll" Alias "mciGetErrorStringA" (ByVal dwError As Long, ByVal lpstrBuffer As String, ByVal uLength As Long) As Long

Declare Function mciExecute Lib "winmm.dll" Alias "mciExecute" (ByVal lpstrCommand As String) As Long

'  Valores de retorno de los errores de MCI 
Const MCIERR_INVALID_DEVICE_ID = (MCIERR_BASE + 1)
Const MCIERR_UNRECOGNIZED_KEYWORD = (MCIERR_BASE + 3)
Const MCIERR_UNRECOGNIZED_COMMAND = (MCIERR_BASE + 5)
Const MCIERR_HARDWARE = (MCIERR_BASE + 6)
Const MCIERR_INVALID_DEVICE_NAME = (MCIERR_BASE + 7)
Const MCIERR_OUT_OF_MEMORY = (MCIERR_BASE + 8)
Const MCIERR_DEVICE_OPEN = (MCIERR_BASE + 9)
Const MCIERR_CANNOT_LOAD_DRIVER = (MCIERR_BASE + 10)
Const MCIERR_MISSING_COMMAND_STRING = (MCIERR_BASE + 11)
Const MCIERR_PARAM_OVERFLOW = (MCIERR_BASE + 12)
Const MCIERR_MISSING_STRING_ARGUMENT = (MCIERR_BASE + 13)
Const MCIERR_BAD_INTEGER = (MCIERR_BASE + 14)
Const MCIERR_PARSER_INTERNAL = (MCIERR_BASE + 15)
Const MCIERR_DRIVER_INTERNAL = (MCIERR_BASE + 16)
Const MCIERR_MISSING_PARAMETER = (MCIERR_BASE + 17)
Const MCIERR_UNSUPPORTED_FUNCTION = (MCIERR_BASE + 18)
Const MCIERR_FILE_NOT_FOUND = (MCIERR_BASE + 19)
Const MCIERR_DEVICE_NOT_READY = (MCIERR_BASE + 20)
Const MCIERR_INTERNAL = (MCIERR_BASE + 21)
Const MCIERR_DRIVER = (MCIERR_BASE + 22)
Const MCIERR_CANNOT_USE_ALL = (MCIERR_BASE + 23)
Const MCIERR_MULTIPLE = (MCIERR_BASE + 24)
Const MCIERR_EXTENSION_NOT_FOUND = (MCIERR_BASE + 25)
Const MCIERR_OUTOFRANGE = (MCIERR_BASE + 26)
Const MCIERR_FLAGS_NOT_COMPATIBLE = (MCIERR_BASE + 28)
Const MCIERR_FILE_NOT_SAVED = (MCIERR_BASE + 30)
Const MCIERR_DEVICE_TYPE_REQUIRED = (MCIERR_BASE + 31)
Const MCIERR_DEVICE_LOCKED = (MCIERR_BASE + 32)
Const MCIERR_DUPLICATE_ALIAS = (MCIERR_BASE + 33)
Const MCIERR_BAD_CONSTANT = (MCIERR_BASE + 34)
Const MCIERR_MUST_USE_SHAREABLE = (MCIERR_BASE + 35)
Const MCIERR_MISSING_DEVICE_NAME = (MCIERR_BASE + 36)
Const MCIERR_BAD_TIME_FORMAT = (MCIERR_BASE + 37)
Const MCIERR_NO_CLOSING_QUOTE = (MCIERR_BASE + 38)
Const MCIERR_DUPLICATE_FLAGS = (MCIERR_BASE + 39)
Const MCIERR_INVALID_FILE = (MCIERR_BASE + 40)
Const MCIERR_NULL_PARAMETER_BLOCK = (MCIERR_BASE + 41)
Const MCIERR_UNNAMED_RESOURCE = (MCIERR_BASE + 42)
Const MCIERR_NEW_REQUIRES_ALIAS = (MCIERR_BASE + 43)
Const MCIERR_NOTIFY_ON_AUTO_OPEN = (MCIERR_BASE + 44)
Const MCIERR_NO_ELEMENT_ALLOWED = (MCIERR_BASE + 45)
Const MCIERR_NONAPPLICABLE_FUNCTION = (MCIERR_BASE + 46)
Const MCIERR_ILLEGAL_FOR_AUTO_OPEN = (MCIERR_BASE + 47)
Const MCIERR_FILENAME_REQUIRED = (MCIERR_BASE + 48)
Const MCIERR_EXTRA_CHARACTERS = (MCIERR_BASE + 49)
Const MCIERR_DEVICE_NOT_INSTALLED = (MCIERR_BASE + 50)
Const MCIERR_GET_CD = (MCIERR_BASE + 51)
Const MCIERR_SET_CD = (MCIERR_BASE + 52)
Const MCIERR_SET_DRIVE = (MCIERR_BASE + 53)
Const MCIERR_DEVICE_LENGTH = (MCIERR_BASE + 54)
Const MCIERR_DEVICE_ORD_LENGTH = (MCIERR_BASE + 55)
Const MCIERR_NO_INTEGER = (MCIERR_BASE + 56)

Const MCIERR_WAVE_OUTPUTSINUSE = (MCIERR_BASE + 64)
Const MCIERR_WAVE_SETOUTPUTINUSE = (MCIERR_BASE + 65)
Const MCIERR_WAVE_INPUTSINUSE = (MCIERR_BASE + 66)
Const MCIERR_WAVE_SETINPUTINUSE = (MCIERR_BASE + 67)
Const MCIERR_WAVE_OUTPUTUNSPECIFIED = (MCIERR_BASE + 68)
Const MCIERR_WAVE_INPUTUNSPECIFIED = (MCIERR_BASE + 69)
Const MCIERR_WAVE_OUTPUTSUNSUITABLE = (MCIERR_BASE + 70)
Const MCIERR_WAVE_SETOUTPUTUNSUITABLE = (MCIERR_BASE + 71)
Const MCIERR_WAVE_INPUTSUNSUITABLE = (MCIERR_BASE + 72)
Const MCIERR_WAVE_SETINPUTUNSUITABLE = (MCIERR_BASE + 73)

Const MCIERR_SEQ_DIV_INCOMPATIBLE = (MCIERR_BASE + 80)
Const MCIERR_SEQ_PORT_INUSE = (MCIERR_BASE + 81)
Const MCIERR_SEQ_PORT_NONEXISTENT = (MCIERR_BASE + 82)
Const MCIERR_SEQ_PORT_MAPNODEVICE = (MCIERR_BASE + 83)
Const MCIERR_SEQ_PORT_MISCERROR = (MCIERR_BASE + 84)
Const MCIERR_SEQ_TIMER = (MCIERR_BASE + 85)
Const MCIERR_SEQ_PORTUNSPECIFIED = (MCIERR_BASE + 86)
Const MCIERR_SEQ_NOMIDIPRESENT = (MCIERR_BASE + 87)

Const MCIERR_NO_WINDOW = (MCIERR_BASE + 90)
Const MCIERR_CREATEWINDOW = (MCIERR_BASE + 91)
Const MCIERR_FILE_READ = (MCIERR_BASE + 92)
Const MCIERR_FILE_WRITE = (MCIERR_BASE + 93)

'  Todos los errores personalizados del controlador del dispositivo tienen que ser >= este valor 
Const MCIERR_CUSTOM_DRIVER_BASE = (MCIERR_BASE + 256)

'  Los nmeros de mensaje tienen que estar en el intervalo entre MCI_FIRST y MCI_LAST

Const MCI_FIRST = &H800
'  Los mensajes 0x801 y 0x802 estn reservados 
Const MCI_OPEN = &H803
Const MCI_CLOSE = &H804
Const MCI_ESCAPE = &H805
Const MCI_PLAY = &H806
Const MCI_SEEK = &H807
Const MCI_STOP = &H808
Const MCI_PAUSE = &H809
Const MCI_INFO = &H80A
Const MCI_GETDEVCAPS = &H80B
Const MCI_SPIN = &H80C
Const MCI_SET = &H80D
Const MCI_STEP = &H80E
Const MCI_RECORD = &H80F
Const MCI_SYSINFO = &H810
Const MCI_BREAK = &H811
Const MCI_SOUND = &H812
Const MCI_SAVE = &H813
Const MCI_STATUS = &H814

Const MCI_CUE = &H830

Const MCI_REALIZE = &H840
Const MCI_WINDOW = &H841
Const MCI_PUT = &H842
Const MCI_WHERE = &H843
Const MCI_FREEZE = &H844
Const MCI_UNFREEZE = &H845

Const MCI_LOAD = &H850
Const MCI_CUT = &H851
Const MCI_COPY = &H852
Const MCI_PASTE = &H853
Const MCI_UPDATE = &H854
Const MCI_RESUME = &H855
Const MCI_DELETE = &H856

Const MCI_LAST = &HFFF

'  los Id. de los mensajes 0x400 siguientes estn reservados para los controladores personalizados
'  todos los mensajes personalizados de comando MCI tienen que ser >= que este valor 	
Const MCI_USER_MESSAGES = (&H400 + MCI_FIRST)
Const MCI_ALL_DEVICE_ID =  - 1 '  Coinciden todos los dispositivos MCI

'  constantes para los tipos predefinidos del dispositivo MCI
Const MCI_DEVTYPE_VCR = 513
Const MCI_DEVTYPE_VIDEODISC = 514
Const MCI_DEVTYPE_OVERLAY = 515
Const MCI_DEVTYPE_CD_AUDIO = 516
Const MCI_DEVTYPE_DAT = 517
Const MCI_DEVTYPE_SCANNER = 518
Const MCI_DEVTYPE_ANIMATION = 519
Const MCI_DEVTYPE_DIGITAL_VIDEO = 520
Const MCI_DEVTYPE_OTHER = 521
Const MCI_DEVTYPE_WAVEFORM_AUDIO = 522
Const MCI_DEVTYPE_SEQUENCER = 523

Const MCI_DEVTYPE_FIRST = MCI_DEVTYPE_VCR
Const MCI_DEVTYPE_LAST = MCI_DEVTYPE_SEQUENCER

Const MCI_DEVTYPE_FIRST_USER = &H1000

'  valores de retorno para el comando de 'modo de estado' 
Const MCI_MODE_NOT_READY = (MCI_STRING_OFFSET + 12)
Const MCI_MODE_STOP = (MCI_STRING_OFFSET + 13)
Const MCI_MODE_PLAY = (MCI_STRING_OFFSET + 14)
Const MCI_MODE_RECORD = (MCI_STRING_OFFSET + 15)
Const MCI_MODE_SEEK = (MCI_STRING_OFFSET + 16)
Const MCI_MODE_PAUSE = (MCI_STRING_OFFSET + 17)
Const MCI_MODE_OPEN = (MCI_STRING_OFFSET + 18)

'  constantes que se usan en los comandos 'establecer formato de hora' y 'formato de la hora de estado' 
Const MCI_FORMAT_MILLISECONDS = 0
Const MCI_FORMAT_HMS = 1
Const MCI_FORMAT_MSF = 2
Const MCI_FORMAT_FRAMES = 3
Const MCI_FORMAT_SMPTE_24 = 4
Const MCI_FORMAT_SMPTE_25 = 5
Const MCI_FORMAT_SMPTE_30 = 6
Const MCI_FORMAT_SMPTE_30DROP = 7
Const MCI_FORMAT_BYTES = 8
Const MCI_FORMAT_SAMPLES = 9
Const MCI_FORMAT_TMSF = 10

'  indicadores para el parmetro wParam del mensaje MM_MCINOTIFY 
Const MCI_NOTIFY_SUCCESSFUL = &H1
Const MCI_NOTIFY_SUPERSEDED = &H2
Const MCI_NOTIFY_ABORTED = &H4
Const MCI_NOTIFY_FAILURE = &H8

'  indicadores comunes para el parmetro dwFlags de los mensajes de comando MCI 
Const MCI_NOTIFY = &H1&
Const MCI_WAIT = &H2&
Const MCI_FROM = &H4&
Const MCI_TO = &H8&
Const MCI_TRACK = &H10&

'  indicadores para el parmetro dwFlags de los mensajes del comando MCI_OPEN 
Const MCI_OPEN_SHAREABLE = &H100&
Const MCI_OPEN_ELEMENT = &H200&
Const MCI_OPEN_ALIAS = &H400&
Const MCI_OPEN_ELEMENT_ID = &H800&
Const MCI_OPEN_TYPE_ID = &H1000&
Const MCI_OPEN_TYPE = &H2000&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_SEEK 
Const MCI_SEEK_TO_START = &H100&
Const MCI_SEEK_TO_END = &H200&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_STATUS 
Const MCI_STATUS_ITEM = &H100&
Const MCI_STATUS_START = &H200&

'  indicadores para el campo dwItem del bloque de parmetros MCI_STATUS_PARMS 
Const MCI_STATUS_LENGTH = &H1&
Const MCI_STATUS_POSITION = &H2&
Const MCI_STATUS_NUMBER_OF_TRACKS = &H3&
Const MCI_STATUS_MODE = &H4&
Const MCI_STATUS_MEDIA_PRESENT = &H5&
Const MCI_STATUS_TIME_FORMAT = &H6&
Const MCI_STATUS_READY = &H7&
Const MCI_STATUS_CURRENT_TRACK = &H8&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_INFO 
Const MCI_INFO_PRODUCT = &H100&
Const MCI_INFO_FILE = &H200&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_GETDEVCAPS 
Const MCI_GETDEVCAPS_ITEM = &H100&

'  indicadores para el campo dwItem del bloque de parmetros MCI_GETDEVCAPS_PARMS 
Const MCI_GETDEVCAPS_CAN_RECORD = &H1&
Const MCI_GETDEVCAPS_HAS_AUDIO = &H2&
Const MCI_GETDEVCAPS_HAS_VIDEO = &H3&
Const MCI_GETDEVCAPS_DEVICE_TYPE = &H4&
Const MCI_GETDEVCAPS_USES_FILES = &H5&
Const MCI_GETDEVCAPS_COMPOUND_DEVICE = &H6&
Const MCI_GETDEVCAPS_CAN_EJECT = &H7&
Const MCI_GETDEVCAPS_CAN_PLAY = &H8&
Const MCI_GETDEVCAPS_CAN_SAVE = &H9&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_SYSINFO 
Const MCI_SYSINFO_QUANTITY = &H100&
Const MCI_SYSINFO_OPEN = &H200&
Const MCI_SYSINFO_NAME = &H400&
Const MCI_SYSINFO_INSTALLNAME = &H800&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_SET 
Const MCI_SET_DOOR_OPEN = &H100&
Const MCI_SET_DOOR_CLOSED = &H200&
Const MCI_SET_TIME_FORMAT = &H400&
Const MCI_SET_AUDIO = &H800&
Const MCI_SET_VIDEO = &H1000&
Const MCI_SET_ON = &H2000&
Const MCI_SET_OFF = &H4000&

'  indicadores para el campo dwAudio de MCI_SET_PARMS o MCI_SEQ_SET_PARMS
Const MCI_SET_AUDIO_ALL = &H4001&
Const MCI_SET_AUDIO_LEFT = &H4002&
Const MCI_SET_AUDIO_RIGHT = &H4003&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_BREAK 
Const MCI_BREAK_KEY = &H100&
Const MCI_BREAK_HWND = &H200&
Const MCI_BREAK_OFF = &H400&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_RECORD 
Const MCI_RECORD_INSERT = &H100&
Const MCI_RECORD_OVERWRITE = &H200&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_SOUND 
Const MCI_SOUND_NAME = &H100&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_SAVE 
Const MCI_SAVE_FILE = &H100&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_LOAD 
Const MCI_LOAD_FILE = &H100&

Type MCI_GENERIC_PARMS
        dwCallback As Long
End Type

Type MCI_OPEN_PARMS
        dwCallback As Long
        wDeviceID As Long
        lpstrDeviceType As String
        lpstrElementName As String
        lpstrAlias As String
End Type

Type MCI_PLAY_PARMS
        dwCallback As Long
        dwFrom As Long
        dwTo As Long
End Type

Type MCI_SEEK_PARMS
        dwCallback As Long
        dwTo As Long
End Type

Type MCI_STATUS_PARMS
        dwCallback As Long
        dwReturn As Long
        dwItem As Long
        dwTrack As Integer
End Type

Type MCI_INFO_PARMS
        dwCallback As Long
        lpstrReturn As String
        dwRetSize As Long
End Type

Type MCI_GETDEVCAPS_PARMS
        dwCallback As Long
        dwReturn As Long
        dwIten As Long
End Type

Type MCI_SYSINFO_PARMS
        dwCallback As Long
        lpstrReturn As String
        dwRetSize As Long
        dwNumber As Long
        wDeviceType As Long
End Type

Type MCI_SET_PARMS
        dwCallback As Long
        dwTimeFormat As Long
        dwAudio As Long
End Type

Type MCI_BREAK_PARMS
        dwCallback As Long
        nVirtKey As Long
        hwndBreak As Long
End Type

Type MCI_SOUND_PARMS
        dwCallback As Long
        lpstrSoundName As String
End Type

Type MCI_SAVE_PARMS
        dwCallback As Long
        lpFileName As String
End Type

Type MCI_LOAD_PARMS
        dwCallback As Long
        lpFileName As String
End Type

Type MCI_RECORD_PARMS
        dwCallback As Long
        dwFrom As Long
        dwTo As Long
End Type

Const MCI_VD_MODE_PARK = (MCI_VD_OFFSET + 1)

'  Id. de retorno para el comando MCI_GETDEVCAPS de videodisco

'  indicadores para el campo dwReturn de MCI_STATUS_PARMS
'  comando MCI_STATUS, (dwItem == MCI_VD_STATUS_MEDIA_TYPE)
Const MCI_VD_MEDIA_CLV = (MCI_VD_OFFSET + 2)
Const MCI_VD_MEDIA_CAV = (MCI_VD_OFFSET + 3)
Const MCI_VD_MEDIA_OTHER = (MCI_VD_OFFSET + 4)

Const MCI_VD_FORMAT_TRACK = &H4001

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_PLAY 
Const MCI_VD_PLAY_REVERSE = &H10000
Const MCI_VD_PLAY_FAST = &H20000
Const MCI_VD_PLAY_SPEED = &H40000
Const MCI_VD_PLAY_SCAN = &H80000
Const MCI_VD_PLAY_SLOW = &H100000

'  indicador para el parmetro dwFlags del mensaje del comando MCI_SEEK 
Const MCI_VD_SEEK_REVERSE = &H10000

'  indicadores para el campo dwItem del bloque de parmetros MCI_STATUS_PARMS 
Const MCI_VD_STATUS_SPEED = &H4002&
Const MCI_VD_STATUS_FORWARD = &H4003&
Const MCI_VD_STATUS_MEDIA_TYPE = &H4004&
Const MCI_VD_STATUS_SIDE = &H4005&
Const MCI_VD_STATUS_DISC_SIZE = &H4006&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_GETDEVCAPS 
Const MCI_VD_GETDEVCAPS_CLV = &H10000
Const MCI_VD_GETDEVCAPS_CAV = &H20000

Const MCI_VD_SPIN_UP = &H10000
Const MCI_VD_SPIN_DOWN = &H20000

'  indicadores para el campo dwItem del bloque de parmetros MCI_GETDEVCAPS_PARMS
Const MCI_VD_GETDEVCAPS_CAN_REVERSE = &H4002&
Const MCI_VD_GETDEVCAPS_FAST_RATE = &H4003&
Const MCI_VD_GETDEVCAPS_SLOW_RATE = &H4004&
Const MCI_VD_GETDEVCAPS_NORMAL_RATE = &H4005&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_STEP 
Const MCI_VD_STEP_FRAMES = &H10000
Const MCI_VD_STEP_REVERSE = &H20000

'  indicador para el mensaje de comando MCI_ESCAPE 
Const MCI_VD_ESCAPE_STRING = &H100&

Type MCI_VD_PLAY_PARMS
        dwCallback As Long
        dwFrom As Long
        dwTo As Long
        dwSpeed As Long
End Type

Type MCI_VD_STEP_PARMS
        dwCallback As Long
        dwFrames As Long
End Type

Type MCI_VD_ESCAPE_PARMS
        dwCallback As Long
        lpstrCommand As String
End Type

Const MCI_WAVE_PCM = (MCI_WAVE_OFFSET + 0)
Const MCI_WAVE_MAPPER = (MCI_WAVE_OFFSET + 1)

'  indicador para el parmetro dwFlags del mensaje del comando MCI_OPEN 
Const MCI_WAVE_OPEN_BUFFER = &H10000

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_SET 
Const MCI_WAVE_SET_FORMATTAG = &H10000
Const MCI_WAVE_SET_CHANNELS = &H20000
Const MCI_WAVE_SET_SAMPLESPERSEC = &H40000
Const MCI_WAVE_SET_AVGBYTESPERSEC = &H80000
Const MCI_WAVE_SET_BLOCKALIGN = &H100000
Const MCI_WAVE_SET_BITSPERSAMPLE = &H200000

'  indicadores para el parmetro dwFlags de los mensajes del comando MCI_STATUS, MCI_SET 
Const MCI_WAVE_INPUT = &H400000
Const MCI_WAVE_OUTPUT = &H800000

'  indicadores para el campo dwItem del bloque de parmetros MCI_STATUS_PARMS 
Const MCI_WAVE_STATUS_FORMATTAG = &H4001&
Const MCI_WAVE_STATUS_CHANNELS = &H4002&
Const MCI_WAVE_STATUS_SAMPLESPERSEC = &H4003&
Const MCI_WAVE_STATUS_AVGBYTESPERSEC = &H4004&
Const MCI_WAVE_STATUS_BLOCKALIGN = &H4005&
Const MCI_WAVE_STATUS_BITSPERSAMPLE = &H4006&
Const MCI_WAVE_STATUS_LEVEL = &H4007&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_SET 
Const MCI_WAVE_SET_ANYINPUT = &H4000000
Const MCI_WAVE_SET_ANYOUTPUT = &H8000000

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_GETDEVCAPS 
Const MCI_WAVE_GETDEVCAPS_INPUTS = &H4001&
Const MCI_WAVE_GETDEVCAPS_OUTPUTS = &H4002&

Type MCI_WAVE_OPEN_PARMS
        dwCallback As Long
        wDeviceID As Long
        lpstrDeviceType As String
        lpstrElementName As String
        lpstrAlias As String
        dwBufferSeconds As Long
End Type

Type MCI_WAVE_DELETE_PARMS
        dwCallback As Long
        dwFrom As Long
        dwTo As Long
End Type

Type MCI_WAVE_SET_PARMS
        dwCallback As Long
        dwTimeFormat As Long
        dwAudio As Long
        wInput As Long
        wOutput As Long
        wFormatTag As Integer
        wReserved2 As Integer
        nChannels As Integer
        wReserved3 As Integer
        nSamplesPerSec As Long
        nAvgBytesPerSec As Long
        nBlockAlign As Integer
        wReserved4 As Integer
        wBitsPerSample As Integer
        wReserved5 As Integer
End Type

'  indicadores para el campo dwReturn del bloque de parmetros MCI_STATUS_PARMS 
'  comando MCI_STATUS, (dwItem == MCI_SEQ_STATUS_DIVTYPE)
Const MCI_SEQ_DIV_PPQN = (0 + MCI_SEQ_OFFSET)
Const MCI_SEQ_DIV_SMPTE_24 = (1 + MCI_SEQ_OFFSET)
Const MCI_SEQ_DIV_SMPTE_25 = (2 + MCI_SEQ_OFFSET)
Const MCI_SEQ_DIV_SMPTE_30DROP = (3 + MCI_SEQ_OFFSET)
Const MCI_SEQ_DIV_SMPTE_30 = (4 + MCI_SEQ_OFFSET)

'  indicadores para el campo dwMaster del bloque de parmetros MCI_SEQ_SET_PARMS 
'  comando MCI_SET, (dwFlags == MCI_SEQ_SET_MASTER)
Const MCI_SEQ_FORMAT_SONGPTR = &H4001
Const MCI_SEQ_FILE = &H4002
Const MCI_SEQ_MIDI = &H4003
Const MCI_SEQ_SMPTE = &H4004
Const MCI_SEQ_NONE = 65533

Const MCI_SEQ_MAPPER = 65535

'  indicadores para el campo dwItem del bloque de parmetros MCI_STATUS_PARMS 
Const MCI_SEQ_STATUS_TEMPO = &H4002&
Const MCI_SEQ_STATUS_PORT = &H4003&
Const MCI_SEQ_STATUS_SLAVE = &H4007&
Const MCI_SEQ_STATUS_MASTER = &H4008&
Const MCI_SEQ_STATUS_OFFSET = &H4009&
Const MCI_SEQ_STATUS_DIVTYPE = &H400A&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_SET 
Const MCI_SEQ_SET_TEMPO = &H10000
Const MCI_SEQ_SET_PORT = &H20000
Const MCI_SEQ_SET_SLAVE = &H40000
Const MCI_SEQ_SET_MASTER = &H80000
Const MCI_SEQ_SET_OFFSET = &H1000000

Type MCI_SEQ_SET_PARMS
        dwCallback As Long
        dwTimeFormat As Long
        dwAudio As Long
        dwTempo As Long
        dwPort As Long
        dwSlave As Long
        dwMaster As Long
        dwOffset As Long
End Type

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_OPEN 
Const MCI_ANIM_OPEN_WS = &H10000
Const MCI_ANIM_OPEN_PARENT = &H20000
Const MCI_ANIM_OPEN_NOSTATIC = &H40000

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_PLAY 
Const MCI_ANIM_PLAY_SPEED = &H10000
Const MCI_ANIM_PLAY_REVERSE = &H20000
Const MCI_ANIM_PLAY_FAST = &H40000
Const MCI_ANIM_PLAY_SLOW = &H80000
Const MCI_ANIM_PLAY_SCAN = &H100000

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_STEP 
Const MCI_ANIM_STEP_REVERSE = &H10000
Const MCI_ANIM_STEP_FRAMES = &H20000

'  indicadores para el campo dwItem del bloque de parmetros MCI_STATUS_PARMS
Const MCI_ANIM_STATUS_SPEED = &H4001&
Const MCI_ANIM_STATUS_FORWARD = &H4002&
Const MCI_ANIM_STATUS_HWND = &H4003&
Const MCI_ANIM_STATUS_HPAL = &H4004&
Const MCI_ANIM_STATUS_STRETCH = &H4005&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_INFO 
Const MCI_ANIM_INFO_TEXT = &H10000

'  indicadores para el campo dwItem del bloque de parmetros MCI_GETDEVCAPS_PARMS 
Const MCI_ANIM_GETDEVCAPS_CAN_REVERSE = &H4001&
Const MCI_ANIM_GETDEVCAPS_FAST_RATE = &H4002&
Const MCI_ANIM_GETDEVCAPS_SLOW_RATE = &H4003&
Const MCI_ANIM_GETDEVCAPS_NORMAL_RATE = &H4004&
Const MCI_ANIM_GETDEVCAPS_PALETTES = &H4006&
Const MCI_ANIM_GETDEVCAPS_CAN_STRETCH = &H4007&
Const MCI_ANIM_GETDEVCAPS_MAX_WINDOWS = &H4008&

'  indicadores para el mensaje del comando MCI_REALIZE 
Const MCI_ANIM_REALIZE_NORM = &H10000
Const MCI_ANIM_REALIZE_BKGD = &H20000

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_WINDOW 
Const MCI_ANIM_WINDOW_HWND = &H10000
Const MCI_ANIM_WINDOW_STATE = &H40000
Const MCI_ANIM_WINDOW_TEXT = &H80000
Const MCI_ANIM_WINDOW_ENABLE_STRETCH = &H100000
Const MCI_ANIM_WINDOW_DISABLE_STRETCH = &H200000

'  indicadores para el campo hWnd del bloque de parmetros MCI_ANIM_WINDOW_PARMS 
'  mensaje del comando MCI_WINDOW, (dwFlags == MCI_ANIM_WINDOW_HWND)
Const MCI_ANIM_WINDOW_DEFAULT = &H0&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_PUT 
Const MCI_ANIM_RECT = &H10000
Const MCI_ANIM_PUT_SOURCE = &H20000      '  tambin  MCI_WHERE
Const MCI_ANIM_PUT_DESTINATION = &H40000      '  tambin  MCI_WHERE

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_WHERE 
Const MCI_ANIM_WHERE_SOURCE = &H20000
Const MCI_ANIM_WHERE_DESTINATION = &H40000

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_UPDATE 
Const MCI_ANIM_UPDATE_HDC = &H20000

Type MCI_ANIM_OPEN_PARMS
        dwCallback As Long
        wDeviceID As Long
        lpstrDeviceType As String
        lpstrElementName As String
        lpstrAlias As String
        dwStyle As Long
        hWndParent As Long
End Type

Type MCI_ANIM_PLAY_PARMS
        dwCallback As Long
        dwFrom As Long
        dwTo As Long
        dwSpeed As Long
End Type

Type MCI_ANIM_STEP_PARMS
        dwCallback As Long
        dwFrames As Long
End Type

Type MCI_ANIM_WINDOW_PARMS
        dwCallback As Long
        hwnd As Long
        nCmdShow As Long
        lpstrText As String
End Type

Type MCI_ANIM_RECT_PARMS
        dwCallback As Long
        rc As Rect
End Type

Type MCI_ANIM_UPDATE_PARMS
        dwCallback As Long
        rc As Rect
        hdc As Long
End Type

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_OPEN 
Const MCI_OVLY_OPEN_WS = &H10000
Const MCI_OVLY_OPEN_PARENT = &H20000

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_STATUS 
Const MCI_OVLY_STATUS_HWND = &H4001&
Const MCI_OVLY_STATUS_STRETCH = &H4002&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_INFO 
Const MCI_OVLY_INFO_TEXT = &H10000

'  indicadores para el campo dwItem del bloque de parmetros MCI_GETDEVCAPS_PARMS
Const MCI_OVLY_GETDEVCAPS_CAN_STRETCH = &H4001&
Const MCI_OVLY_GETDEVCAPS_CAN_FREEZE = &H4002&
Const MCI_OVLY_GETDEVCAPS_MAX_WINDOWS = &H4003&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_WINDOW 
Const MCI_OVLY_WINDOW_HWND = &H10000
Const MCI_OVLY_WINDOW_STATE = &H40000
Const MCI_OVLY_WINDOW_TEXT = &H80000
Const MCI_OVLY_WINDOW_ENABLE_STRETCH = &H100000
Const MCI_OVLY_WINDOW_DISABLE_STRETCH = &H200000

'  indicadores para el parmetro hWnd del bloque de parmetros MCI_OVLY_WINDOW_PARMS
Const MCI_OVLY_WINDOW_DEFAULT = &H0&

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_PUT 
Const MCI_OVLY_RECT = &H10000
Const MCI_OVLY_PUT_SOURCE = &H20000
Const MCI_OVLY_PUT_DESTINATION = &H40000
Const MCI_OVLY_PUT_FRAME = &H80000
Const MCI_OVLY_PUT_VIDEO = &H100000

'  indicadores para el parmetro dwFlags del mensaje del comando MCI_WHERE 
Const MCI_OVLY_WHERE_SOURCE = &H20000
Const MCI_OVLY_WHERE_DESTINATION = &H40000
Const MCI_OVLY_WHERE_FRAME = &H80000
Const MCI_OVLY_WHERE_VIDEO = &H100000

Type MCI_OVLY_OPEN_PARMS
        dwCallback As Long
        wDeviceID As Long
        lpstrDeviceType As String
        lpstrElementName As String
        lpstrAlias As String
        dwStyle As Long
        hWndParent As Long
End Type

Type MCI_OVLY_WINDOW_PARMS
        dwCallback As Long
        hwnd As Long
        nCmdShow As Long
        lpstrText As String
End Type

Type MCI_OVLY_RECT_PARMS
        dwCallback As Long
        rc As Rect
End Type

Type MCI_OVLY_SAVE_PARMS
        dwCallback As Long
        lpFileName As String
        rc As Rect
End Type

Type MCI_OVLY_LOAD_PARMS
        dwCallback As Long
        lpFileName As String
        rc As Rect
End Type

Const CAPS1 = 94              '  otras maysculas
Const C1_TRANSPARENT = &H1    '  nueva mayscula de barrido
Const NEWTRANSPARENT = 3      '  selo con SetBkMode()

Const QUERYROPSUPPORT = 40    '  selo para determinar la compatibilidad ROP

Const SELECTDIB = 41          '  escape del archivo DIB.DRV seleccionado

' ----------------
' Funciones de administracin de bases de datos de asociacin shell
' -----------------

'  valores de error para ShellExecute() superior a los cdigos WinExec() normales
Const SE_ERR_SHARE = 26
Const SE_ERR_ASSOCINCOMPLETE = 27
Const SE_ERR_DDETIMEOUT = 28
Const SE_ERR_DDEFAIL = 29
Const SE_ERR_DDEBUSY = 30
Const SE_ERR_NOASSOC = 31

' ----------------
' API de impresin
' ----------------

Type PRINTER_INFO_1
        flags As Long
        pDescription As String
        pName As String
        pComment As String
End Type

Type PRINTER_INFO_2
        pServerName As String
        pPrinterName As String
        pShareName As String
        pPortName As String
        pDriverName As String
        pComment As String
        pLocation As String
        pDevMode As DEVMODE
        pSepFile As String
        pPrintProcessor As String
        pDatatype As String
        pParameters As String
        pSecurityDescriptor As SECURITY_DESCRIPTOR
        Attributes As Long
        Priority As Long
        DefaultPriority As Long
        StartTime As Long
        UntilTime As Long
        Status As Long
        cJobs As Long
        AveragePPM As Long
End Type

Type PRINTER_INFO_3
        pSecurityDescriptor As SECURITY_DESCRIPTOR
End Type

Const PRINTER_CONTROL_PAUSE = 1
Const PRINTER_CONTROL_RESUME = 2
Const PRINTER_CONTROL_PURGE = 3

Const PRINTER_STATUS_PAUSED = &H1
Const PRINTER_STATUS_ERROR = &H2
Const PRINTER_STATUS_PENDING_DELETION = &H4
Const PRINTER_STATUS_PAPER_JAM = &H8
Const PRINTER_STATUS_PAPER_OUT = &H10
Const PRINTER_STATUS_MANUAL_FEED = &H20
Const PRINTER_STATUS_PAPER_PROBLEM = &H40
Const PRINTER_STATUS_OFFLINE = &H80
Const PRINTER_STATUS_IO_ACTIVE = &H100
Const PRINTER_STATUS_BUSY = &H200
Const PRINTER_STATUS_PRINTING = &H400
Const PRINTER_STATUS_OUTPUT_BIN_FULL = &H800
Const PRINTER_STATUS_NOT_AVAILABLE = &H1000
Const PRINTER_STATUS_WAITING = &H2000
Const PRINTER_STATUS_PROCESSING = &H4000
Const PRINTER_STATUS_INITIALIZING = &H8000
Const PRINTER_STATUS_WARMING_UP = &H10000
Const PRINTER_STATUS_TONER_LOW = &H20000
Const PRINTER_STATUS_NO_TONER = &H40000
Const PRINTER_STATUS_PAGE_PUNT = &H80000
Const PRINTER_STATUS_USER_INTERVENTION = &H100000
Const PRINTER_STATUS_OUT_OF_MEMORY = &H200000
Const PRINTER_STATUS_DOOR_OPEN = &H400000

Const PRINTER_ATTRIBUTE_QUEUED = &H1
Const PRINTER_ATTRIBUTE_DIRECT = &H2
Const PRINTER_ATTRIBUTE_DEFAULT = &H4
Const PRINTER_ATTRIBUTE_SHARED = &H8
Const PRINTER_ATTRIBUTE_NETWORK = &H10
Const PRINTER_ATTRIBUTE_HIDDEN = &H20
Const PRINTER_ATTRIBUTE_LOCAL = &H40

Const NO_PRIORITY = 0
Const MAX_PRIORITY = 99
Const MIN_PRIORITY = 1
Const DEF_PRIORITY = 1

Type JOB_INFO_1
        JobId As Long
        pPrinterName As String
        pMachineName As String
        pUserName As String
        pDocument As String
        pDatatype As String
        pStatus As String
        Status As Long
        Priority As Long
        Position As Long
        TotalPages As Long
        PagesPrinted As Long
        Submitted As SYSTEMTIME
End Type

Type JOB_INFO_2
        JobId As Long
        pPrinterName As String
        pMachineName As String
        pUserName As String
        pDocument As String
        pNotifyName As String
        pDatatype As String
        pPrintProcessor As String
        pParameters As String
        pDriverName As String
        pDevMode As DEVMODE
        pStatus As String
        pSecurityDescriptor As SECURITY_DESCRIPTOR
        Status As Long
        Priority As Long
        Position As Long
        StartTime As Long
        UntilTime As Long
        TotalPages As Long
        Size As Long
        Submitted As SYSTEMTIME
        time As Long
        PagesPrinted As Long
End Type

Const JOB_CONTROL_PAUSE = 1
Const JOB_CONTROL_RESUME = 2
Const JOB_CONTROL_CANCEL = 3
Const JOB_CONTROL_RESTART = 4

Const JOB_STATUS_PAUSED = &H1
Const JOB_STATUS_ERROR = &H2
Const JOB_STATUS_DELETING = &H4
Const JOB_STATUS_SPOOLING = &H8
Const JOB_STATUS_PRINTING = &H10
Const JOB_STATUS_OFFLINE = &H20
Const JOB_STATUS_PAPEROUT = &H40
Const JOB_STATUS_PRINTED = &H80

Const JOB_POSITION_UNSPECIFIED = 0

Type ADDJOB_INFO_1
        Path As String
        JobId As Long
End Type

Type DRIVER_INFO_1
        pName As String
End Type

Type DRIVER_INFO_2
        cVersion As Long
        pName As String
        pEnvironment As String
        pDriverPath As String
        pDataFile As String
        pConfigFile As String
End Type

Type DOC_INFO_1
        pDocName As String
        pOutputFile As String
        pDatatype As String
End Type

Type FORM_INFO_1
        pName As String
        Size As SIZEL
        ImageableArea As RECTL
End Type

Const FORM_BUILTIN = &H1

Type PRINTPROCESSOR_INFO_1
        pName As String
End Type

Type PORT_INFO_1
        pName As String
End Type

Type MONITOR_INFO_1
        pName As String
End Type

Type MONITOR_INFO_2
        pName As String
        pEnvironment As String
        pDLLName As String
End Type

Type DATATYPES_INFO_1
        pName As String
End Type

Type PRINTER_DEFAULTS
        pDatatype As String
        pDevMode As DEVMODE
        DesiredAccess As Long
End Type

Type PRINTER_INFO_4
	pPrinterName As String
	pServerName As String
	Attributes As Long
End Type

Type PRINTER_INFO_5
        pPrinterName As String
        pPortName As String
        Attributes As Long
        DeviceNotSelectedTimeout As Long
        TransmissionRetryTimeout As Long
End Type

Const PRINTER_CONTROL_SET_STATUS = 4
Const PRINTER_ATTRIBUTE_WORK_OFFLINE = &H400
Const PRINTER_ATTRIBUTE_ENABLE_BIDI = &H800
Const JOB_CONTROL_DELETE = 5
Const JOB_STATUS_USER_INTERVENTION = &H10000

Type DRIVER_INFO_3
        cVersion As Long
        pName As String                    '  QMS 810
        pEnvironment As String             '  Win32 x86
        pDriverPath As String              '  c:\drivers\pscript.dll
        pDataFile As String                '  c:\drivers\QMS810.PPD
        pConfigFile As String              '  c:\drivers\PSCRPTUI.DLL
        pHelpFile As String                '  c:\drivers\PSCRPTUI.HLP
        pDependentFiles As String          '
        pMonitorName As String             '  "PJL monitor"
        pDefaultDataType As String         '  "EMF"
End Type

Type DOC_INFO_2
        pDocName As String
        pOutputFile As String
        pDatatype As String
        dwMode As Long
        JobId As Long
End Type

Const DI_CHANNEL = 1                  '  inicia el canal de lectura/escritura directas,
Const DI_READ_SPOOL_JOB = 3

Type PORT_INFO_2
        pPortName As String
        pMonitorName As String
        pDescription As String
        fPortType As Long
        Reserved As Long
End Type

Const PORT_TYPE_WRITE = &H1
Const PORT_TYPE_READ = &H2
Const PORT_TYPE_REDIRECTED = &H4
Const PORT_TYPE_NET_ATTACHED = &H8

Declare Function EnumPrinters Lib "winspool.drv" Alias "EnumPrintersA" (ByVal flags As Long, ByVal name As String, ByVal Level As Long, pPrinterEnum As Byte, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long

Declare Function EnumPrinterPropertySheets Lib "winspool.drv" Alias "EnumPrinterPropertySheets" (hPrinter As Long, hwnd As Long, lpfnAdd As Long, ByVal lParam As Long) As Long

Const PRINTER_ENUM_DEFAULT = &H1
Const PRINTER_ENUM_LOCAL = &H2
Const PRINTER_ENUM_CONNECTIONS = &H4
Const PRINTER_ENUM_FAVORITE = &H4
Const PRINTER_ENUM_NAME = &H8
Const PRINTER_ENUM_REMOTE = &H10
Const PRINTER_ENUM_SHARED = &H20
Const PRINTER_ENUM_NETWORK = &H40

Const PRINTER_ENUM_EXPAND = &H4000
Const PRINTER_ENUM_CONTAINER = &H8000

Const PRINTER_ENUM_ICONMASK = &HFF0000
Const PRINTER_ENUM_ICON1 = &H10000
Const PRINTER_ENUM_ICON2 = &H20000
Const PRINTER_ENUM_ICON3 = &H40000
Const PRINTER_ENUM_ICON4 = &H80000
Const PRINTER_ENUM_ICON5 = &H100000
Const PRINTER_ENUM_ICON6 = &H200000
Const PRINTER_ENUM_ICON7 = &H400000
Const PRINTER_ENUM_ICON8 = &H800000

Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
Declare Function ResetPrinter Lib "winspool.drv" Alias "ResetPrinterA" (ByVal hPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
Declare Function SetJob Lib "winspool.drv" Alias "SetJobA" (ByVal hPrinter As Long, ByVal JobId As Long, ByVal Level As Long, pJob As Byte, ByVal Command As Long) As Long
Declare Function GetJob Lib "winspool.drv" Alias "GetJobA" (ByVal hPrinter As Long, ByVal JobId As Long, ByVal Level As Long, pJob As Byte, ByVal cdBuf As Long, pcbNeeded As Long) As Long
Declare Function EnumJobs Lib "winspool.drv" Alias "EnumJobsA" (ByVal hPrinter As Long, ByVal FirstJob As Long, ByVal NoJobs As Long, ByVal Level As Long, pJob As Byte, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Declare Function AddPrinter Lib "winspool.drv" Alias "AddPrinterA" (ByVal pName As String, ByVal Level As Long, pPrinter As Any) As Long

Declare Function AddPrinterDriver Lib "winspool.drv" Alias "AddPrinterDriverA" (ByVal pName As String, ByVal Level As Long, pDriverInfo As Any) As Long

Declare Function EnumPrinterDrivers Lib "winspool.drv" Alias "EnumPrinterDriversA" (ByVal pName As String, ByVal pEnvironment As String, ByVal Level As Long, pDriverInfo As Byte, ByVal cdBuf As Long, pcbNeeded As Long, pcRetruned As Long) As Long
Declare Function GetPrinterDriver Lib "winspool.drv" Alias "GetPrinterDriverA" (ByVal hPrinter As Long, ByVal pEnvironment As String, ByVal Level As Long, pDriverInfo As Byte, ByVal cdBuf As Long, pcbNeeded As Long) As Long
Declare Function GetPrinterDriverDirectory Lib "winspool.drv" Alias "GetPrinterDriverDirectoryA" (ByVal pName As String, ByVal pEnvironment As String, ByVal Level As Long, pDriverDirectory As Byte, ByVal cdBuf As Long, pcbNeeded As Long) As Long
Declare Function DeletePrinterDriver Lib "winspool.drv" Alias "DeletePrinterDriverA" (ByVal pName As String, ByVal pEnvironment As String, ByVal pDriverName As String) As Long

Declare Function AddPrintProcessor Lib "winspool.drv" Alias "AddPrintProcessorA" (ByVal pName As String, ByVal pEnvironment As String, ByVal pPathName As String, ByVal pPrintProcessorName As String) As Long
Declare Function EnumPrintProcessors Lib "winspool.drv" Alias "EnumPrintProcessorsA" (ByVal pName As String, ByVal pEnvironment As String, ByVal Level As Long, pPrintProcessorInfo As Byte, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Declare Function GetPrintProcessorDirectory Lib "winspool.drv" Alias "GetPrintProcessorDirectoryA" (ByVal pName As String, ByVal pEnvironment As String, ByVal Level As Long, ByVal pPrintProcessorInfo As String, ByVal cdBuf As Long, pcbNeeded As Long) As Long
Declare Function EnumPrintProcessorDatatypes Lib "winspool.drv" Alias "EnumPrintProcessorDatatypesA" (ByVal pName As String, ByVal pPrintProcessorName As String, ByVal Level As Long, pDatatypes As Byte, ByVal cdBuf As Long, pcbNeeded As Long, pcRetruned As Long) As Long
Declare Function DeletePrintProcessor Lib "winspool.drv" Alias "DeletePrintProcessorA" (ByVal pName As String, ByVal pEnvironment As String, ByVal pPrintProcessorName As String) As Long

Declare Function StartDocPrinter Lib "winspool.drv" Alias "StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pDocInfo As Byte) As Long
Declare Function StartPagePrinter Lib "winspool.drv" Alias "StartPagePrinter" (ByVal hPrinter As Long) As Long
Declare Function WritePrinter Lib "winspool.drv" Alias "WritePrinter" (ByVal hPrinter As Long, pBuf As Any, ByVal cdBuf As Long, pcWritten As Long) As Long
Declare Function EndPagePrinter Lib "winspool.drv" Alias "EndPagePrinter" (ByVal hPrinter As Long) As Long
Declare Function AbortPrinter Lib "winspool.drv" Alias "AbortPrinter" (ByVal hPrinter As Long) As Long
Declare Function ReadPrinter Lib "winspool.drv" Alias "ReadPrinter" (ByVal hPrinter As Long, pBuf As Any, ByVal cdBuf As Long, pNoBytesRead As Long) As Long
Declare Function EndDocPrinter Lib "winspool.drv" Alias "EndDocPrinter" (ByVal hPrinter As Long) As Long

Declare Function AddJob Lib "winspool.drv" Alias "AddJobA" (ByVal hPrinter As Long, ByVal Level As Long, pData As Byte, ByVal cdBuf As Long, pcbNeeded As Long) As Long
Declare Function ScheduleJob Lib "winspool.drv" Alias "ScheduleJob" (ByVal hPrinter As Long, ByVal JobId As Long) As Long
Declare Function PrinterProperties Lib "winspool.drv" Alias "PrinterProperties" (ByVal hwnd As Long, ByVal hPrinter As Long) As Long
Declare Function DocumentProperties Lib "winspool.drv" Alias "DocumentPropertiesA" (ByVal hwnd As Long, ByVal hPrinter As Long, ByVal pDeviceName As String, pDevModeOutput As DEVMODE, pDevModeInput As DEVMODE, ByVal fMode As Long) As Long
Declare Function AdvancedDocumentProperties Lib "winspool.drv" Alias "AdvancedDocumentPropertiesA" (ByVal hwnd As Long, ByVal hPrinter As Long, ByVal pDeviceName As String, pDevModeOutput As DEVMODE, pDevModeInput As DEVMODE) As Long

Declare Function GetPrinterData Lib "winspool.drv" Alias "GetPrinterDataA" (ByVal hPrinter As Long, ByVal pValueName As String, pType As Long, pData As Byte, ByVal nSize As Long, pcbNeeded As Long) As Long
Declare Function SetPrinterData Lib "winspool.drv" Alias "SetPrinterDataA" (ByVal hPrinter As Long, ByVal pValueName As String, ByVal dwType As Long, pData As Byte, ByVal cbData As Long) As Long
Declare Function WaitForPrinterChange Lib "winspool.drv" Alias "WaitForPrinterChange" (ByVal hPrinter As Long, ByVal flags As Long) As Long

Const PRINTER_CHANGE_ADD_PRINTER = &H1
Const PRINTER_CHANGE_SET_PRINTER = &H2
Const PRINTER_CHANGE_DELETE_PRINTER = &H4
Const PRINTER_CHANGE_PRINTER = &HFF
Const PRINTER_CHANGE_ADD_JOB = &H100
Const PRINTER_CHANGE_SET_JOB = &H200
Const PRINTER_CHANGE_DELETE_JOB = &H400
Const PRINTER_CHANGE_WRITE_JOB = &H800
Const PRINTER_CHANGE_JOB = &HFF00
Const PRINTER_CHANGE_ADD_FORM = &H10000
Const PRINTER_CHANGE_SET_FORM = &H20000
Const PRINTER_CHANGE_DELETE_FORM = &H40000
Const PRINTER_CHANGE_FORM = &H70000
Const PRINTER_CHANGE_ADD_PORT = &H100000
Const PRINTER_CHANGE_CONFIGURE_PORT = &H200000
Const PRINTER_CHANGE_DELETE_PORT = &H400000
Const PRINTER_CHANGE_PORT = &H700000
Const PRINTER_CHANGE_ADD_PRINT_PROCESSOR = &H1000000
Const PRINTER_CHANGE_DELETE_PRINT_PROCESSOR = &H4000000
Const PRINTER_CHANGE_PRINT_PROCESSOR = &H7000000
Const PRINTER_CHANGE_ADD_PRINTER_DRIVER = &H10000000
Const PRINTER_CHANGE_DELETE_PRINTER_DRIVER = &H40000000
Const PRINTER_CHANGE_PRINTER_DRIVER = &H70000000
Const PRINTER_CHANGE_TIMEOUT = &H80000000
Const PRINTER_CHANGE_ALL = &H7777FFFF

Declare Function PrinterMessageBox Lib "winspool.drv" Alias "PrinterMessageBoxA" (ByVal hPrinter As Long, ByVal error As Long, ByVal hwnd As Long, ByVal pText As String, ByVal pCaption As String, ByVal dwType As Long) As Long

Const PRINTER_ERROR_INFORMATION = &H80000000
Const PRINTER_ERROR_WARNING = &H40000000
Const PRINTER_ERROR_SEVERE = &H20000000

Const PRINTER_ERROR_OUTOFPAPER = &H1
Const PRINTER_ERROR_JAM = &H2
Const PRINTER_ERROR_OUTOFTONER = &H4

Declare Function ClosePrinter Lib "winspool.drv" Alias "ClosePrinter" (ByVal hPrinter As Long) As Long
Declare Function AddForm Lib "winspool.drv" Alias "AddFormA" (ByVal hPrinter As Long, ByVal Level As Long, pForm As Byte) As Long
Declare Function DeleteForm Lib "winspool.drv" Alias "DeleteFormA" (ByVal hPrinter As Long, ByVal pFormName As String) As Long
Declare Function GetForm Lib "winspool.drv" Alias "GetFormA" (ByVal hPrinter As Long, ByVal pFormName As String, ByVal Level As Long, pForm As Byte, ByVal cbBuf As Long, pcbNeeded As Long) As Long
Declare Function SetForm Lib "winspool.drv" Alias "SetFormA" (ByVal hPrinter As Long, ByVal pFormName As String, ByVal Level As Long, pForm As Byte) As Long
Declare Function EnumForms Lib "winspool.drv" Alias "EnumFormsA" (ByVal hPrinter As Long, ByVal Level As Long, pForm As Byte, ByVal cbBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long

Declare Function EnumMonitors Lib "winspool.drv" Alias "EnumMonitorsA" (ByVal pName As String, ByVal Level As Long, pMonitors As Byte, ByVal cbBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Declare Function AddMonitor Lib "winspool.drv" Alias "AddMonitorA" (ByVal pName As String, ByVal Level As Long, pMonitors As Byte) As Long
Declare Function DeleteMonitor Lib "winspool.drv" Alias "DeleteMonitorA" (ByVal pName As String, ByVal pEnvironment As String, ByVal pMonitorName As String) As Long

Declare Function EnumPorts Lib "winspool.drv" Alias "EnumPortsA" (ByVal pName As String, ByVal Level As Long, ByVal lpbPorts As Long, ByVal cbBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Declare Function AddPort Lib "winspool.drv" Alias "AddPortA" (ByVal pName As String, ByVal hwnd As Long, ByVal pMonitorName As String) As Long
Declare Function ConfigurePort Lib "winspool.drv" Alias "ConfigurePortA" (ByVal pName As String, ByVal hwnd As Long, ByVal pPortName As String) As Long
Declare Function DeletePort Lib "winspool.drv" Alias "DeletePortA" (ByVal pName As String, ByVal hwnd As Long, ByVal pPortName As String) As Long

Declare Function AddPrinterConnection Lib "winspool.drv" Alias "AddPrinterConnectionA" (ByVal pName As String) As Long

Declare Function DeletePrinterConnection Lib "winspool.drv" Alias "DeletePrinterConnectionA" (ByVal pName As String) As Long
Declare Function ConnectToPrinterDlg Lib "winspool.drv" Alias "ConnectToPrinterDlg" (ByVal hwnd As Long, ByVal flags As Long) As Long

Type PROVIDOR_INFO_1
        pName As String
        pEnvironment As String
        pDLLName As String
End Type

Declare Function AddPrintProvidor Lib "winspool.drv" Alias "AddPrintProvidorA" (ByVal pName As String, ByVal Level As Long, pProvidorInfo As Byte) As Long
Declare Function DeletePrintProvidor Lib "winspool.drv" Alias "DeletePrintProvidorA" (ByVal pName As String, ByVal pEnvironment As String, ByVal pPrintProvidorName As String) As Long

Const SERVER_ACCESS_ADMINISTER = &H1
Const SERVER_ACCESS_ENUMERATE = &H2

Const PRINTER_ACCESS_ADMINISTER = &H4
Const PRINTER_ACCESS_USE = &H8

Const JOB_ACCESS_ADMINISTER = &H10

' Derechos de acceso para servidores de impresin

Const SERVER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SERVER_ACCESS_ADMINISTER Or SERVER_ACCESS_ENUMERATE)
Const SERVER_READ = (STANDARD_RIGHTS_READ Or SERVER_ACCESS_ENUMERATE)
Const SERVER_WRITE = (STANDARD_RIGHTS_WRITE Or SERVER_ACCESS_ADMINISTER Or SERVER_ACCESS_ENUMERATE)
Const SERVER_EXECUTE = (STANDARD_RIGHTS_EXECUTE Or SERVER_ACCESS_ENUMERATE)

' Derechos de acceso para impresoras
Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)
Const PRINTER_READ = (STANDARD_RIGHTS_READ Or PRINTER_ACCESS_USE)
Const PRINTER_WRITE = (STANDARD_RIGHTS_WRITE Or PRINTER_ACCESS_USE)
Const PRINTER_EXECUTE = (STANDARD_RIGHTS_EXECUTE Or PRINTER_ACCESS_USE)

' Derechos de acceso para trabajos
Const JOB_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or JOB_ACCESS_ADMINISTER)
Const JOB_READ = (STANDARD_RIGHTS_READ Or JOB_ACCESS_ADMINISTER)
Const JOB_WRITE = (STANDARD_RIGHTS_WRITE Or JOB_ACCESS_ADMINISTER)
Const JOB_EXECUTE = (STANDARD_RIGHTS_EXECUTE Or JOB_ACCESS_ADMINISTER)

'  Compatibilidad de red de Windows 

'  ENUMERACIN DE RECURSOS

Const RESOURCE_CONNECTED = &H1
Const RESOURCE_PUBLICNET = &H2
Const RESOURCE_REMEMBERED = &H3

Const RESOURCETYPE_ANY = &H0
Const RESOURCETYPE_DISK = &H1
Const RESOURCETYPE_PRINT = &H2
Const RESOURCETYPE_UNKNOWN = &HFFFF

Const RESOURCEUSAGE_CONNECTABLE = &H1
Const RESOURCEUSAGE_CONTAINER = &H2
Const RESOURCEUSAGE_RESERVED = &H80000000

Const RESOURCEDISPLAYTYPE_GENERIC = &H0
Const RESOURCEDISPLAYTYPE_DOMAIN = &H1
Const RESOURCEDISPLAYTYPE_SERVER = &H2
Const RESOURCEDISPLAYTYPE_SHARE = &H3
Const RESOURCEDISPLAYTYPE_FILE = &H4
Const RESOURCEDISPLAYTYPE_GROUP = &H5

Type NETRESOURCE
        dwScope As Long
        dwType As Long
        dwDisplayType As Long
        dwUsage As Long
        lpLocalName As String
        lpRemoteName As String
        lpComment As String
        lpProvider As String
End Type

Const CONNECT_UPDATE_PROFILE = &H1

Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName As String) As Long
Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long
Declare Function WNetCancelConnection Lib "mpr.dll" Alias "WNetCancelConnectionA" (ByVal lpszName As String, ByVal bForce As Long) As Long
Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long
Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" (ByVal lpszLocalName As String, ByVal lpszRemoteName As String, cbRemoteName As Long) As Long
Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As NETRESOURCE, lphEnum As Long) As Long
Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As Any, lpBufferSize As Long) As Long
Declare Function WNetCloseEnum Lib "mpr.dll" Alias "WNetCloseEnum" (ByVal hEnum As Long) As Long

Declare Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long
Declare Function WNetConnectionDialog Lib "mpr.dll" Alias "WNetConnectionDialog" (ByVal hwnd As Long, ByVal dwType As Long) As Long
Declare Function WNetDisconnectDialog Lib "mpr.dll" Alias "WNetDisconnectDialog" (ByVal hwnd As Long, ByVal dwType As Long) As Long

Declare Function WNetGetLastError Lib "mpr.dll" Alias "WNetGetLastErrorA" (lpError As Long, ByVal lpErrorBuf As String, ByVal nErrorBufSize As Long, ByVal lpNameBuf As String, ByVal nNameBufSize As Long) As Long

' Cdigos de estado

' Esta seccin proporciona compatibilidad con versiones anteriores. Es preferible usar cdigos 
' ERROR_. Puede que los cdigos de error WN_ no estn disponibles en futuras versiones.

' General

Const WN_SUCCESS = NO_ERROR
Const WN_NOT_SUPPORTED = ERROR_NOT_SUPPORTED
Const WN_NET_ERROR = ERROR_UNEXP_NET_ERR
Const WN_MORE_DATA = ERROR_MORE_DATA
Const WN_BAD_POINTER = ERROR_INVALID_ADDRESS
Const WN_BAD_VALUE = ERROR_INVALID_PARAMETER
Const WN_BAD_PASSWORD = ERROR_INVALID_PASSWORD
Const WN_ACCESS_DENIED = ERROR_ACCESS_DENIED
Const WN_FUNCTION_BUSY = ERROR_BUSY
Const WN_WINDOWS_ERROR = ERROR_UNEXP_NET_ERR
Const WN_BAD_USER = ERROR_BAD_USERNAME
Const WN_OUT_OF_MEMORY = ERROR_NOT_ENOUGH_MEMORY
Const WN_NO_NETWORK = ERROR_NO_NETWORK
Const WN_EXTENDED_ERROR = ERROR_EXTENDED_ERROR

' Conexin

Const WN_NOT_CONNECTED = ERROR_NOT_CONNECTED
Const WN_OPEN_FILES = ERROR_OPEN_FILES
Const WN_DEVICE_IN_USE = ERROR_DEVICE_IN_USE
Const WN_BAD_NETNAME = ERROR_BAD_NET_NAME
Const WN_BAD_LOCALNAME = ERROR_BAD_DEVICE
Const WN_ALREADY_CONNECTED = ERROR_ALREADY_ASSIGNED
Const WN_DEVICE_ERROR = ERROR_GEN_FAILURE
Const WN_CONNECTION_CLOSED = ERROR_CONNECTION_UNAVAIL
Const WN_NO_NET_OR_BAD_PATH = ERROR_NO_NET_OR_BAD_PATH
Const WN_BAD_PROVIDER = ERROR_BAD_PROVIDER
Const WN_CANNOT_OPEN_PROFILE = ERROR_CANNOT_OPEN_PROFILE
Const WN_BAD_PROFILE = ERROR_BAD_PROFILE

' Enumeracin

Const WN_BAD_HANDLE = ERROR_INVALID_HANDLE
Const WN_NO_MORE_ENTRIES = ERROR_NO_MORE_ITEMS
Const WN_NOT_CONTAINER = ERROR_NOT_CONTAINER

Const WN_NO_ERROR = NO_ERROR

' Esta seccin contiene las definiciones
' para el soporte de NetBIOS 3.0 porttil

Const NCBNAMSZ = 16   '  longitud absoluta del nombre de red
Const MAX_LANA = 254  '  LANA que estn en el intervalo 0 a MAX_LANA

Type NCB
        ncb_command As Integer
        ncb_retcode As Integer
        ncb_lsn As Integer
        ncb_num As Integer
        ncb_buffer As String
        ncb_length As Integer
        ncb_callname As String * NCBNAMSZ
        ncb_name As String * NCBNAMSZ
        ncb_rto As Integer
        ncb_sto As Integer
        ncb_post As Long
        ncb_lana_num As Integer
        ncb_cmd_cplt As Integer
        ncb_reserve(10) As Byte	' Reservado, tiene que ser 0
        ncb_event As Long
End Type

Type ADAPTER_STATUS
        adapter_address As String * 6
        rev_major As Integer
        reserved0 As Integer
        adapter_type As Integer
        rev_minor As Integer
        duration As Integer
        frmr_recv As Integer
        frmr_xmit As Integer
        iframe_recv_err As Integer
        xmit_aborts As Integer
        xmit_success As Long
        recv_success As Long
        iframe_xmit_err As Integer
        recv_buff_unavail As Integer
        t1_timeouts As Integer
        ti_timeouts As Integer
        Reserved1 As Long
        free_ncbs As Integer
        max_cfg_ncbs As Integer
        max_ncbs As Integer
        xmit_buf_unavail As Integer
        max_dgram_size As Integer
        pending_sess As Integer
        max_cfg_sess As Integer
        max_sess As Integer
        max_sess_pkt_size As Integer
        name_count As Integer
End Type

Type NAME_BUFFER
        name  As String * NCBNAMSZ
        name_num As Integer
        name_flags As Integer
End Type

' valores para los bits name_flags.

Const NAME_FLAGS_MASK = &H87

Const GROUP_NAME = &H80
Const UNIQUE_NAME = &H0

Const REGISTERING = &H0
Const REGISTERED = &H4
Const DEREGISTERED = &H5
Const DUPLICATE = &H6
Const DUPLICATE_DEREG = &H7

Type SESSION_HEADER
        sess_name As Integer
        num_sess As Integer
        rcv_dg_outstanding As Integer
        rcv_any_outstanding As Integer
End Type

Type SESSION_BUFFER
        lsn As Integer
        State As Integer
        local_name As String * NCBNAMSZ
        remote_name As String * NCBNAMSZ
        rcvs_outstanding As Integer
        sends_outstanding As Integer
End Type

' Valores para el estado
Const LISTEN_OUTSTANDING = &H1
Const CALL_PENDING = &H2
Const SESSION_ESTABLISHED = &H3
Const HANGUP_PENDING = &H4
Const HANGUP_COMPLETE = &H5
Const SESSION_ABORTED = &H6

Type LANA_ENUM
        Length As Integer
        lana(MAX_LANA) As Integer
End Type

Type FIND_NAME_HEADER
        node_count As Integer
        Reserved As Integer
        unique_group As Integer
End Type

Type FIND_NAME_BUFFER
        Length As Integer
        access_control As Integer
        frame_control As Integer
        destination_addr(6) As Integer
        source_addr(6) As Integer
        routing_info(18) As Integer
End Type

Type ACTION_HEADER
        transport_id As Long
        action_code As Integer
        Reserved As Integer
End Type

' Valores para transport_id
Const ALL_TRANSPORTS = "M\0\0\0"
Const MS_NBF = "MNBF"

' Cdigos del comando NCB
Const NCBCALL = &H10  ' NCB LLAMAR
Const NCBLISTEN = &H11  ' NCB ESCUCHAR
Const NCBHANGUP = &H12  ' NCB COLGAR
Const NCBSEND = &H14  ' NCB ENVIAR
Const NCBRECV = &H15  ' NCB RECIBIR
Const NCBRECVANY = &H16  ' NCB RECIBIR CUALQUIERA
Const NCBCHAINSEND = &H17  ' NCB ENVIAR CADENA
Const NCBDGSEND = &H20  ' NCB ENVIAR DATAGRAMA
Const NCBDGRECV = &H21  ' NCB RECIBIR DATAGRAMA
Const NCBDGSENDBC = &H22  ' NCB ENVIAR DATAGRAMA DE DIFUSIN
Const NCBDGRECVBC = &H23  ' NCB RECIBIR DATAGRAMA DE DIFUSIN
Const NCBADDNAME = &H30  '  NCB AGREGAR NOMBRE
Const NCBDELNAME = &H31  '  NCB ELIMINAR NOMBRE
Const NCBRESET = &H32  '  NCB RESTABLECER
Const NCBASTAT = &H33  '  NCB ESTADO DE ADAPTADOR
Const NCBSSTAT = &H34  '  NCB ESTADO DE SESIN
Const NCBCANCEL = &H35  '  NCB CANCELAR
Const NCBADDGRNAME = &H36  '  NCB AGREGAR NOMBRE DE GRUPO
Const NCBENUM = &H37  '  NCB ENUMERAR NMEROS LANA
Const NCBUNLINK = &H70  '  NCB DESVINCULAR
Const NCBSENDNA = &H71  '  NCB NO ENVIAR ACK
Const NCBCHAINSENDNA = &H72  '  NCB CADENA ENVIADA NO ES ACK
Const NCBLANSTALERT = &H73  '  NCB ALERTA DEL ESTADO DE LAN
Const NCBACTION = &H77  '  NCB ACCIN 
Const NCBFINDNAME = &H78  '  NCB ENCONTRAR NOMBRE
Const NCBTRACE = &H79  '  NCB SEGUIR PASO A PASO

Const ASYNCH = &H80  '  conjunto de bits superiores == asncrono

' Cdigos de retorno de NCB 
Const NRC_GOODRET = &H0  '  valor devuelto vlido
                                '  se devuelve tambin al aceptar la solicitud de ASYNCH
Const NRC_BUFLEN = &H1   '  longitud de bfer no permitida
Const NRC_ILLCMD = &H3   '  comando no permitido
Const NRC_CMDTMO = &H5   '  finalizado el tiempo de espera del comando
Const NRC_INCOMP = &H6   '  mensaje incompleto, enve otro comando
Const NRC_BADDR = &H7    '  direccin de bfer no permitida
Const NRC_SNUMOUT = &H8  '  nmero de sesin fuera del intervalo
Const NRC_NORES = &H9    '  no hay recursos disponibles
Const NRC_SCLOSED = &HA  '  sesin cerrada
Const NRC_CMDCAN = &HB   '  comando cancelado
Const NRC_DUPNAME = &HD  '  nombre duplicado
Const NRC_NAMTFUL = &HE  '  tabla de nombres llena
Const NRC_ACTSES = &HF   '  no se puede eliminar; el nombre tiene sesiones activas
Const NRC_LOCTFUL = &H11 '  tabla de sesiones locales llena
Const NRC_REMTFUL = &H12 '  tabla de sesiones remotas llena
Const NRC_ILLNN = &H13   '  nmero de nombre no permitido
Const NRC_NOCALL = &H14  '  no hay nombre de llamada
Const NRC_NOWILD = &H15  '  no se puede poner en NCB_NAME
Const NRC_INUSE = &H16   '  el nombre se est usando en el adaptador remoto
Const NRC_NAMERR = &H17  '  nombre eliminado
Const NRC_SABORT = &H18  '  sesin finalizada anormalmente
Const NRC_NAMCONF = &H19 '  detectado conflicto de nombres
Const NRC_IFBUSY = &H21  '  interfaz ocupada, use IRET antes de intentar de nuevo
Const NRC_TOOMANY = &H22 '  hay demasiados comandos pendientes, intntelo ms tarde
Const NRC_BRIDGE = &H23  '  campo ncb_lana_num no vlido
Const NRC_CANOCCR = &H24 '  comando terminado mientras se produca la cancelacin
Const NRC_CANCEL = &H26  '  no es vlido cancelar el comando
Const NRC_DUPENV = &H30  '  nombre definido por otro proceso local
Const NRC_ENVNOTDEF = &H34  '  entorno sin definir. Es necesario RESTABLECER
Const NRC_OSRESNOTAV = &H35 '  agotados los recursos necesarios del SO
Const NRC_MAXAPPS = &H36 '  superado el nmero mximo de aplicaciones
Const NRC_NOSAPS = &H37  '  no hay saps disponibles para netbios
Const NRC_NORESOURCES = &H38  '  los recursos solicitados no estn disponibles
Const NRC_INVADDRESS = &H39  '  direccin ncb no vlida o longitud > segmento
Const NRC_INVDDID = &H3B '  NCB DDID no vlido
Const NRC_LOCKFAIL = &H3C  '  fallo de bloqueo en el rea del usuario
Const NRC_OPENERR = &H3F '  NETBIOS no cargado
Const NRC_SYSTEM = &H40  '  error del sistema

Const NRC_PENDING = &HFF '  el comando asncrono no ha terminado

'
' NetAPIs de Win32.
'
Declare Function NetUserChangePassword Lib "Netapi32.dll" (Domain As Any, User As Any, OldPass As Byte, NewPass As Byte) As Long
Declare Function NetUserGetInfo Lib "Netapi32.dll" (lpServer As Any, UserName As Byte, ByVal Level As Long, lpBuffer As Long) As Long
Declare Function NetUserGetGroups Lib "Netapi32.dll" (lpServer As Any, UserName As Byte, ByVal Level As Long, lpBuffer As Long, ByVal PrefMaxLen As Long, lpEntriesRead As Long, lpTotalEntries As Long) As Long
Declare Function NetUserGetLocalGroups Lib "Netapi32.dll" (lpServer As Any, UserName As Byte, ByVal Level As Long, ByVal Flags As Long, lpBuffer As Long, ByVal MaxLen As Long, lpEntriesRead As Long, lpTotalEntries As Long) As Long
Declare Function NetUserAdd Lib "netapi32" (lpServer As Any, ByVal Level As Long, lpUser As USER_INFO_3_API, lpError As Long) As Long
Declare Function NetWkstaGetInfo Lib "Netapi32.dll" (lpServer As Any, ByVal Level As Long, lpBuffer As Any) As Long
Declare Function NetWkstaUserGetInfo Lib "Netapi32.dll" (ByVal reserved As Any, ByVal Level As Long, lpBuffer As Any) As Long
Declare Function NetApiBufferFree Lib "Netapi32.dll" (ByVal lpBuffer As Long) As Long
Declare Function NetRemoteTOD Lib "Netapi32.dll" (yServer As Any, pBuffer As Long) As Long
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Declare Function GetUserNameW Lib "advapi32.dll" (lpBuffer As Byte, nSize As Long) As Long
Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Declare Function GetComputerNameW Lib "kernel32" (lpBuffer As Any, nSize As Long) As Long
Declare Function GetCurrentProcess Lib "kernel32" () As Long
Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Declare Function GetTokenInformation Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal TokenInformationClass As Long, TokenInformation As Any, ByVal TokenInformationLength As Long, ReturnLength As Long) As Long
Declare Function LookupAccountSid Lib "advapi32.dll" Alias "LookupAccountSidW" (ByVal lpSystemName As Any, Sid As Any, Name As Any, cbName As Long, ReferencedDomainName As Any, cbReferencedDomainName As Long, peUse As Integer) As Long
Declare Function NetLocalGroupDelMembers Lib "netapi32.dll" (ByVal psServer As Long, ByVal psLocalGroup As Long, ByVal lLevel As Long, uMember As LOCALGROUP_MEMBERS_INFO_0, ByVal lMemberCount As Long) As Long
Declare Function NetLocalGroupGetMembers Lib "netapi32.dll" (ByVal psServer As Long, ByVal psLocalGroup As Long, ByVal lLevel As Long, pBuffer As Long, ByVal lMaxLength As Long, plEntriesRead As Long, plTotalEntries As Long, phResume As Long) As Long
Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long
Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As Any, lphEnum As Long) As Long
Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As NETRESOURCE, lpBufferSize As Long) As Long
Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long
Declare Function Netbios Lib "netapi32.dll" Alias "Netbios" (pncb As NCB) As Byte

Type USER_INFO_3
   ' El nivel 0 comienza aqu
   Name As Long
   ' El nivel 1 comienza aqu
   Password As Long
   PasswordAge As Long
   Privilege As Long
   HomeDir As Long
   Comment As Long
   Flags As Long
   ScriptPath As Long
   ' El nivel 2 comienza aqu
   AuthFlags As Long
   FullName As Long
   UserComment As Long
   Parms As Long
   Workstations As Long
   LastLogon As Long
   LastLogoff As Long
   AcctExpires As Long
   MaxStorage As Long
   UnitsPerWeek As Long
   LogonHours As Long
   BadPwCount As Long
   NumLogons As Long
   LogonServer As Long
   CountryCode As Long
   CodePage As Long
   ' El nivel 3 comienza aqu
   UserID As Long
   PrimaryGroupID As Long
   Profile As Long
   HomeDirDrive As Long
   PasswordExpired As Long
End Type

Type GROUP_INFO_2
   Name As Long
   Comment As Long
   GroupID As Long
   Attributes As Long
End Type

Type LOCALGROUP_MEMBERS_INFO_0
   pSID As Long
End Type

Type LOCALGROUP_MEMBERS_INFO_1
   'El nivel 0 comienza aqu
   pSID As Long
   'El nivel 1 comienza aqu
   eUsage As g_netSID_NAME_USE
   psName As Long
End Type

Type WKSTA_INFO_102
   wki102_platform_id As Long
   wki102_computername As Long
   wki102_langroup As Long
   wki102_ver_major As Long
   wki102_ver_minor As Long
   wki102_lanroot As Long
   wki102_logged_on_users As Long
End Type

Type WKSTA_USER_INFO_1
   wkui1_username As Long
   wkui1_logon_domain As Long
   wkui1_oth_domains As Long
   wkui1_logon_server As Long
End Type

Type NETRESOURCE
    dwScope As Long
    dwType As Long
    dwDisplayType As Long
    dwUsage As Long
    pLocalName As Long
    pRemoteName As Long
    pComment As Long
    pProvider As Long
End Type

Enum g_netSID_NAME_USE
   SidTypeUser = 1&
   SidTypeGroup = 2&
   SidTypeDomain = 3&
   SidTypeAlias = 4&
   SidTypeWellKnownGroup = 5&
   SidTypeDeletedAccount = 6&
   SidTypeInvalid = 7&
   SidTypeUnknown = 8&
End Enum

Const FILTER_TEMP_DUPLICATE_ACCOUNT As Long = &H1&
Const FILTER_NORMAL_ACCOUNT As Long = &H2&
Const FILTER_PROXY_ACCOUNT As Long = &H4&
Const FILTER_INTERDOMAIN_TRUST_ACCOUNT As Long = &H8&
Const FILTER_WORKSTATION_TRUST_ACCOUNT As Long = &H10&
Const FILTER_SERVER_TRUST_ACCOUNT As Long = &H20&

Const TIMEQ_FOREVER = -1&             '((tipo long sin signo) -1L)
Const USER_MAXSTORAGE_UNLIMITED = -1& '((tipo long sin signo) -1L)
Const USER_NO_LOGOFF = -1&            '((tipo long sin signo) -1L)
Const UNITS_PER_DAY = 24
Const UNITS_PER_WEEK = UNITS_PER_DAY * 7

Const USER_PRIV_MASK = 3
Const USER_PRIV_GUEST = 0
Const USER_PRIV_USER = 1
Const USER_PRIV_ADMIN = 2

Const UNLEN = 256         ' Longitud mxima para el usuario
Const GNLEN = UNLEN       ' Longitud mxima para el nombre del grupo
Const CNLEN = 15          ' Longitud mxima para el nombre del equipo
Const PWLEN = 256         ' Longitud mxima para la contrasea
Const LM20_PWLEN = 14     ' Longitud mxima para la contrasea LM 2.0
Const MAXCOMMENTSZ = 256  ' Longitud para comentarios de propsito mltiple
Const LG_INCLUDE_INDIRECT As Long = &H1&

Const UF_SCRIPT = &H1
Const UF_ACCOUNTDISABLE = &H2
Const UF_HOMEDIR_REQUIRED = &H8
Const UF_LOCKOUT = &H10
Const UF_PASSWD_NOTREQD = &H20
Const UF_PASSWD_CANT_CHANGE = &H40

Const LG_INCLUDE_INDIRECT As Long = &H1&

Const NERR_Success As Long = 0&
Const NERR_BASE = 2100
Const NERR_InvalidComputer = (NERR_BASE + 251)
Const NERR_NotPrimary = (NERR_BASE + 126)
Const NERR_GroupExists = (NERR_BASE + 123)
Const NERR_UserExists = (NERR_BASE + 124)
Const NERR_PasswordTooShort = (NERR_BASE + 145)

Const RESOURCE_CONNECTED As Long = &H1&
Const RESOURCE_GLOBALNET As Long = &H2&
Const RESOURCE_REMEMBERED As Long = &H3&
Const RESOURCE_ENUM_ALL As Long = &HFFFF
Const RESOURCEDISPLAYTYPE_DOMAIN As Long = &H1&
Const RESOURCEDISPLAYTYPE_FILE As Long = &H4&
Const RESOURCEDISPLAYTYPE_GENERIC As Long = &H0&
Const RESOURCEDISPLAYTYPE_GROUP As Long = &H5&
Const RESOURCEDISPLAYTYPE_SERVER As Long = &H2&
Const RESOURCEDISPLAYTYPE_SHARE As Long = &H3&
Const RESOURCETYPE_ANY As Long = &H0&
Const RESOURCETYPE_DISK As Long = &H1&
Const RESOURCETYPE_PRINT As Long = &H2&
Const RESOURCETYPE_UNKNOWN As Long = &HFFFF&
Const RESOURCEUSAGE_ALL As Long = &H0&
Const RESOURCEUSAGE_CONNECTABLE As Long = &H1&
Const RESOURCEUSAGE_CONTAINER As Long = &H2&
Const RESOURCEUSAGE_RESERVED As Long = &H80000000

' Valores permitidos para la expresin contenida en except().
Const EXCEPTION_EXECUTE_HANDLER = 1
Const EXCEPTION_CONTINUE_SEARCH = 0
Const EXCEPTION_CONTINUE_EXECUTION = -1

' Constantes y tipos de dilogo UI

' ----Constantes--------------------------------------------------------------
Const ctlFirst = &H400
Const ctlLast = &H4FF
    '  Botones de comando
Const psh1 = &H400
Const psh2 = &H401
Const psh3 = &H402
Const psh4 = &H403
Const psh5 = &H404
Const psh6 = &H405
Const psh7 = &H406
Const psh8 = &H407
Const psh9 = &H408
Const psh10 = &H409
Const psh11 = &H40A
Const psh12 = &H40B
Const psh13 = &H40C
Const psh14 = &H40D
Const psh15 = &H40E
Const pshHelp = psh15
Const psh16 = &H40F
    '  Casillas de verificacin
Const chx1 = &H410
Const chx2 = &H411
Const chx3 = &H412
Const chx4 = &H413
Const chx5 = &H414
Const chx6 = &H415
Const chx7 = &H416
Const chx8 = &H417
Const chx9 = &H418
Const chx10 = &H419
Const chx11 = &H41A
Const chx12 = &H41B
Const chx13 = &H41C
Const chx14 = &H41D
Const chx15 = &H41E
Const chx16 = &H41D
    '  Botones de opcin
Const rad1 = &H420
Const rad2 = &H421
Const rad3 = &H422
Const rad4 = &H423
Const rad5 = &H424
Const rad6 = &H425
Const rad7 = &H426
Const rad8 = &H427
Const rad9 = &H428
Const rad10 = &H429
Const rad11 = &H42A
Const rad12 = &H42B
Const rad13 = &H42C
Const rad14 = &H42D
Const rad15 = &H42E
Const rad16 = &H42F
    '  Grupos, marcos, rectngulos e iconos
Const grp1 = &H430
Const grp2 = &H431
Const grp3 = &H432
Const grp4 = &H433
Const frm1 = &H434
Const frm2 = &H435
Const frm3 = &H436
Const frm4 = &H437
Const rct1 = &H438
Const rct2 = &H439
Const rct3 = &H43A
Const rct4 = &H43B
Const ico1 = &H43C
Const ico2 = &H43D
Const ico3 = &H43E
Const ico4 = &H43F
    '  Texto esttico
Const stc1 = &H440
Const stc2 = &H441
Const stc3 = &H442
Const stc4 = &H443
Const stc5 = &H444
Const stc6 = &H445
Const stc7 = &H446
Const stc8 = &H447
Const stc9 = &H448
Const stc10 = &H449
Const stc11 = &H44A
Const stc12 = &H44B
Const stc13 = &H44C
Const stc14 = &H44D
Const stc15 = &H44E
Const stc16 = &H44F
Const stc17 = &H450
Const stc18 = &H451
Const stc19 = &H452
Const stc20 = &H453
Const stc21 = &H454
Const stc22 = &H455
Const stc23 = &H456
Const stc24 = &H457
Const stc25 = &H458
Const stc26 = &H459
Const stc27 = &H45A
Const stc28 = &H45B
Const stc29 = &H45C
Const stc30 = &H45D
Const stc31 = &H45E
Const stc32 = &H45F
    '  Cuadros de lista
Const lst1 = &H460
Const lst2 = &H461
Const lst3 = &H462
Const lst4 = &H463
Const lst5 = &H464
Const lst6 = &H465
Const lst7 = &H466
Const lst8 = &H467
Const lst9 = &H468
Const lst10 = &H469
Const lst11 = &H46A
Const lst12 = &H46B
Const lst13 = &H46C
Const lst14 = &H46D
Const lst15 = &H46E
Const lst16 = &H46F
    '  Cuadros combinados
Const cmb1 = &H470
Const cmb2 = &H471
Const cmb3 = &H472
Const cmb4 = &H473
Const cmb5 = &H474
Const cmb6 = &H475
Const cmb7 = &H476
Const cmb8 = &H477
Const cmb9 = &H478
Const cmb10 = &H479
Const cmb11 = &H47A
Const cmb12 = &H47B
Const cmb13 = &H47C
Const cmb14 = &H47D
Const cmb15 = &H47E
Const cmb16 = &H47F
    '  Controles de edicin
Const edt1 = &H480
Const edt2 = &H481
Const edt3 = &H482
Const edt4 = &H483
Const edt5 = &H484
Const edt6 = &H485
Const edt7 = &H486
Const edt8 = &H487
Const edt9 = &H488
Const edt10 = &H489
Const edt11 = &H48A
Const edt12 = &H48B
Const edt13 = &H48C
Const edt14 = &H48D
Const edt15 = &H48E
Const edt16 = &H48F
    '  Barras de desplazamiento
Const scr1 = &H490
Const scr2 = &H491
Const scr3 = &H492
Const scr4 = &H493
Const scr5 = &H494
Const scr6 = &H495
Const scr7 = &H496
Const scr8 = &H497

Const FILEOPENORD = 1536
Const MULTIFILEOPENORD = 1537
Const PRINTDLGORD = 1538
Const PRNSETUPDLGORD = 1539
Const FINDDLGORD = 1540
Const REPLACEDLGORD = 1541
Const FONTDLGORD = 1542
Const FORMATDLGORD31 = 1543
Const FORMATDLGORD30 = 1544

Type CRGB
        bRed As Byte
        bGreen As Byte
        bBlue As Byte
        bExtra As Byte
End Type

' -----------------
' ADVAPI32
' -----------------

' definiciones de prototipos de funciones, constantes y tipos
' para la API del Registro de Windows de 32 bits

Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_PERFORMANCE_DATA = &H80000004
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_DYN_DATA = &H80000006

' Prototipos de la API del Registro

Declare Function RegCloseKey Lib "advapi32.dll" Alias "RegCloseKey" (ByVal hKey As Long) As Long
Declare Function RegConnectRegistry Lib "advapi32.dll" Alias "RegConnectRegistryA" (ByVal lpMachineName As String, ByVal hKey As Long, phkResult As Long) As Long
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
Declare Function RegFlushKey Lib "advapi32.dll" Alias "RegFlushKey" (ByVal hKey As Long) As Long
Declare Function RegGetKeySecurity Lib "advapi32.dll" Alias "RegGetKeySecurity" (ByVal hKey As Long, ByVal SecurityInformation As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR, lpcbSecurityDescriptor As Long) As Long
Declare Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpFile As String) As Long
Declare Function RegNotifyChangeKeyValue Lib "advapi32.dll" Alias "RegNotifyChangeKeyValue" (ByVal hKey As Long, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long, ByVal hEvent As Long, ByVal fAsynchronus As Long) As Long
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long
Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value. 
Declare Function RegReplaceKey Lib "advapi32.dll" Alias "RegReplaceKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpNewFile As String, ByVal lpOldFile As String) As Long
Declare Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyA" (ByVal hKey As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long
Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hKey As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Declare Function RegSetKeySecurity Lib "advapi32.dll" Alias "RegSetKeySecurity" (ByVal hKey As Long, ByVal SecurityInformation As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR) As Long
Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Declare Function RegUnLoadKey Lib "advapi32.dll" Alias "RegUnLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Declare Function InitiateSystemShutdown Lib "advapi32.dll" Alias "InitiateSystemShutdownA" (ByVal lpMachineName As String, ByVal lpMessage As String, ByVal dwTimeout As Long, ByVal bForceAppsClosed As Long, ByVal bRebootAfterShutdown As Long) As Long
Declare Function AbortSystemShutdown Lib "advapi32.dll" Alias "AbortSystemShutdownA" (ByVal lpMachineName As String) As Long

' Nombres de las bases de datos de servicio
Const SERVICES_ACTIVE_DATABASE = "ServicesActive"
Const SERVICES_FAILED_DATABASE = "ServicesFailed"

' Valor para indicar que no se efecta ningn cambio en un parmetro opcional
Const SERVICE_NO_CHANGE = &HFFFF

' Estado del servicio -- para peticiones de Enum (mscara de bits)
Const SERVICE_ACTIVE = &H1
Const SERVICE_INACTIVE = &H2
Const SERVICE_STATE_ALL = (SERVICE_ACTIVE Or SERVICE_INACTIVE)

' Controles
Const SERVICE_CONTROL_STOP = &H1
Const SERVICE_CONTROL_PAUSE = &H2
Const SERVICE_CONTROL_CONTINUE = &H3
Const SERVICE_CONTROL_INTERROGATE = &H4
Const SERVICE_CONTROL_SHUTDOWN = &H5

' Estado del servicio -- para CurrentState
Const SERVICE_STOPPED = &H1
Const SERVICE_START_PENDING = &H2
Const SERVICE_STOP_PENDING = &H3
Const SERVICE_RUNNING = &H4
Const SERVICE_CONTINUE_PENDING = &H5
Const SERVICE_PAUSE_PENDING = &H6
Const SERVICE_PAUSED = &H7

' Controles aceptados (mscara de bits)
Const SERVICE_ACCEPT_STOP = &H1
Const SERVICE_ACCEPT_PAUSE_CONTINUE = &H2
Const SERVICE_ACCEPT_SHUTDOWN = &H4

' Tipo de acceso especfico del objeto Administrador de control del servicio 
Const SC_MANAGER_CONNECT = &H1
Const SC_MANAGER_CREATE_SERVICE = &H2
Const SC_MANAGER_ENUMERATE_SERVICE = &H4
Const SC_MANAGER_LOCK = &H8
Const SC_MANAGER_QUERY_LOCK_STATUS = &H10
Const SC_MANAGER_MODIFY_BOOT_CONFIG = &H20

Const SC_MANAGER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SC_MANAGER_CONNECT Or SC_MANAGER_CREATE_SERVICE Or SC_MANAGER_ENUMERATE_SERVICE Or SC_MANAGER_LOCK Or SC_MANAGER_QUERY_LOCK_STATUS Or SC_MANAGER_MODIFY_BOOT_CONFIG)

' Tipo de acceso especfico del objeto Service
Const SERVICE_QUERY_CONFIG = &H1
Const SERVICE_CHANGE_CONFIG = &H2
Const SERVICE_QUERY_STATUS = &H4
Const SERVICE_ENUMERATE_DEPENDENTS = &H8
Const SERVICE_START = &H10
Const SERVICE_STOP = &H20
Const SERVICE_PAUSE_CONTINUE = &H40
Const SERVICE_INTERROGATE = &H80
Const SERVICE_USER_DEFINED_CONTROL = &H100

Const SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG Or SERVICE_QUERY_STATUS Or SERVICE_ENUMERATE_DEPENDENTS Or SERVICE_START Or SERVICE_STOP Or SERVICE_PAUSE_CONTINUE Or SERVICE_INTERROGATE Or SERVICE_USER_DEFINED_CONTROL)


Type SERVICE_STATUS
        dwServiceType As Long
        dwCurrentState As Long
        dwControlsAccepted As Long
        dwWin32ExitCode As Long
        dwServiceSpecificExitCode As Long
        dwCheckPoint As Long
        dwWaitHint As Long
End Type

Type ENUM_SERVICE_STATUS
        lpServiceName As String
        lpDisplayName As String
        ServiceStatus As SERVICE_STATUS
End Type

Type QUERY_SERVICE_LOCK_STATUS
        fIsLocked As Long
        lpLockOwner As String
        dwLockDuration As Long
End Type

Type QUERY_SERVICE_CONFIG
        dwServiceType As Long
        dwStartType As Long
        dwErrorControl As Long
        lpBinaryPathName As String
        lpLoadOrderGroup As String
        dwTagId As Long
        lpDependencies As String
        lpServiceStartName As String
        lpDisplayName As String
End Type

Type SERVICE_TABLE_ENTRY
        lpServiceName As String
        lpServiceProc As Long
End Type


' ++ Versin: 0010    '  Incremente este nmero si una modificacin tiene efectos globales
' Copyright (c) 1995  Microsoft Corporation
' Nombre de mdulo:
'     winsvc.h
' Resumen:
'     Archivo de encabezado para el Administrador de control del servicio 
' Entorno:
'     Modo de usuario - Win32
' --*/
'
'  Constantes

'  Carcter que designa que un nombre es un grupo
'
Const SC_GROUP_IDENTIFIER = "+"

'  Prototipo para la funcin de controlador de control de servicio

' /////////////////////////////////////////////////////////////////////////
'  Prototipos de las funciones de la API
' /////////////////////////////////////////////////////////////////////////

Declare Function ChangeServiceConfig Lib "advapi32.dll" Alias "ChangeServiceConfigA" (ByVal hService As Long, ByVal dwServiceType As Long, ByVal dwStartType As Long, ByVal dwErrorControl As Long, ByVal lpBinaryPathName As String, ByVal lpLoadOrderGroup As String, lpdwTagId As Long, ByVal lpDependencies As String, ByVal lpServiceStartName As String, ByVal lpPassword As String, ByVal lpDisplayName As String) As Long
Declare Function CloseServiceHandle Lib "advapi32.dll" Alias "CloseServiceHandle" (ByVal hSCObject As Long) As Long
Declare Function ControlService Lib "advapi32.dll" Alias "ControlService" (ByVal hService As Long, ByVal dwControl As Long, lpServiceStatus As SERVICE_STATUS) As Long
Declare Function CreateService Lib "advapi32.dll" Alias "CreateServiceA" (ByVal hSCManager As Long, ByVal lpServiceName As String, ByVal lpDisplayName As String, ByVal dwDesiredAccess As Long, ByVal dwServiceType As Long, ByVal dwStartType As Long, ByVal dwErrorControl As Long, ByVal lpBinaryPathName As String, ByVal lpLoadOrderGroup As String, lpdwTagId As Long, ByVal lpDependencies As String, ByVal lp As String, ByVal lpPassword As String) As Long
Declare Function DeleteService Lib "advapi32.dll" Alias "DeleteService" (ByVal hService As Long) As Long
Declare Function EnumDependentServices Lib "advapi32.dll" Alias "EnumDependentServicesA" (ByVal hService As Long, ByVal dwServiceState As Long, lpServices As ENUM_SERVICE_STATUS, ByVal cbBufSize As Long, pcbBytesNeeded As Long, lpServicesReturned As Long) As Long
Declare Function EnumServicesStatus Lib "advapi32.dll" Alias "EnumServicesStatusA" (ByVal hSCManager As Long, ByVal dwServiceType As Long, ByVal dwServiceState As Long, lpServices As ENUM_SERVICE_STATUS, ByVal cbBufSize As Long, pcbBytesNeeded As Long, lpServicesReturned As Long, lpResumeHandle As Long) As Long
Declare Function GetServiceKeyName Lib "advapi32.dll" Alias "GetServiceKeyNameA" (ByVal hSCManager As Long, ByVal lpDisplayName As String, ByVal lpServiceName As String, lpcchBuffer As Long) As Long
Declare Function GetServiceDisplayName Lib "advapi32.dll" Alias "GetServiceDisplayNameA" (ByVal hSCManager As Long, ByVal lpServiceName As String, ByVal lpDisplayName As String, lpcchBuffer As Long) As Long
Declare Function LockServiceDatabase Lib "advapi32.dll" Alias "LockServiceDatabase" (ByVal hSCManager As Long) As Long
Declare Function NotifyBootConfigStatus Lib "advapi32.dll" Alias "NotifyBootConfigStatus" (ByVal BootAcceptable As Long) As Long
Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" (ByVal lpMachineName As String, ByVal lpDatabaseName As String, ByVal dwDesiredAccess As Long) As Long
Declare Function OpenService Lib "advapi32.dll" Alias "OpenServiceA" (ByVal hSCManager As Long, ByVal lpServiceName As String, ByVal dwDesiredAccess As Long) As Long
Declare Function QueryServiceConfig Lib "advapi32.dll" Alias "QueryServiceConfigA" (ByVal hService As Long, lpServiceConfig As QUERY_SERVICE_CONFIG, ByVal cbBufSize As Long, pcbBytesNeeded As Long) As Long
Declare Function QueryServiceLockStatus Lib "advapi32.dll" Alias "QueryServiceLockStatusA" (ByVal hSCManager As Long, lpLockStatus As QUERY_SERVICE_LOCK_STATUS, ByVal cbBufSize As Long, pcbBytesNeeded As Long) As Long
Declare Function QueryServiceObjectSecurity Lib "advapi32.dll" Alias "QueryServiceObjectSecurity" (ByVal hService As Long, ByVal dwSecurityInformation As Long, lpSecurityDescriptor As Any, ByVal cbBufSize As Long, pcbBytesNeeded As Long) As Long
Declare Function QueryServiceStatus Lib "advapi32.dll" Alias "QueryServiceStatus" (ByVal hService As Long, lpServiceStatus As SERVICE_STATUS) As Long
Declare Function RegisterServiceCtrlHandler Lib "advapi32.dll" Alias "RegisterServiceCtrlHandlerA" (ByVal lpServiceName As String, ByVal lpHandlerProc As Long) As Long
Declare Function SetServiceObjectSecurity Lib "advapi32.dll" Alias "SetServiceObjectSecurity" (ByVal hService As Long, ByVal dwSecurityInformation As Long, lpSecurityDescriptor As Any) As Long
Declare Function SetServiceStatus Lib "advapi32.dll" Alias "SetServiceStatus" (ByVal hServiceStatus As Long, lpServiceStatus As SERVICE_STATUS) As Long
Declare Function StartServiceCtrlDispatcher Lib "advapi32.dll" Alias "StartServiceCtrlDispatcherA" (lpServiceStartTable As SERVICE_TABLE_ENTRY) As Long
Declare Function StartService Lib "advapi32.dll" Alias "StartServiceA" (ByVal hService As Long, ByVal dwNumServiceArgs As Long, ByVal lpServiceArgVectors As Long) As Long
Declare Function UnlockServiceDatabase Lib "advapi32.dll" Alias "UnlockServiceDatabase" (ScLock As Any) As Long

Type LARGE_INTEGER
    lowpart As Long
    highpart As Long
End Type
    

' Seccin para los datos del Monitor del sistema 

Const PERF_DATA_VERSION = 1
Const PERF_DATA_REVISION = 1

Type PERF_DATA_BLOCK
        Signature As String * 4
        LittleEndian As Long
        Version As Long
        Revision As Long
        TotalByteLength As Long
        HeaderLength As Long
        NumObjectTypes As Long
        DefaultObject As Long
        SystemTime As SYSTEMTIME
        PerfTime As LARGE_INTEGER
        PerfFreq As LARGE_INTEGER
        PerTime100nSec As LARGE_INTEGER
        SystemNameLength As Long
        SystemNameOffset As Long
End Type

Type PERF_OBJECT_TYPE
        TotalByteLength As Long
        DefinitionLength As Long
        HeaderLength As Long
        ObjectNameTitleIndex As Long
        ObjectNameTitle As String
        ObjectHelpTitleIndex As Long
        ObjectHelpTitle As String
        DetailLevel As Long
        NumCounters As Long
        DefaultCounter As Long
        NumInstances As Long
        CodePage As Long
        PerfTime As LARGE_INTEGER
        PerfFreq As LARGE_INTEGER
End Type

Const PERF_NO_INSTANCES = -1  '  no hay instancias

' El tipo de contador es la palabra "or" de los valores siguientes, como se describe a continuacin
' 
' seleccione uno de los valores siguientes para indicar el tamao de datos del contador
Const PERF_SIZE_DWORD = &H0
Const PERF_SIZE_LARGE = &H100
Const PERF_SIZE_ZERO = &H200       '  para los campos de longitud cero
Const PERF_SIZE_VARIABLE_LEN = &H300       '  la longitud est en el campo CounterLength de la estructura Counter Definition

' seleccione uno de los valores siguientes para indicar el uso del campo contador
Const PERF_TYPE_NUMBER = &H0         '  nmero (no un contador)
Const PERF_TYPE_COUNTER = &H400      '  valor numrico que aumenta
Const PERF_TYPE_TEXT = &H800         '  campo de texto
Const PERF_TYPE_ZERO = &HC00         '  presenta un cero

' Si ha seleccionado el campo PERF_TYPE_NUMBER, seleccione uno de los 
' valores siguientes para describir el nmero
Const PERF_NUMBER_HEX = &H0          '  lo presenta como valor hexadecimal
Const PERF_NUMBER_DECIMAL = &H10000  '  lo presenta como entero decimal
Const PERF_NUMBER_DEC_1000 = &H20000 '  lo presenta como decimal/1000
'
' Si ha seleccionado el valor PERF_TYPE_COUNTER, seleccione uno de los 
' valores siguientes para indicar el tipo de contador
Const PERF_COUNTER_VALUE = &H0         '  presenta el valor del contador
Const PERF_COUNTER_RATE = &H10000      '  divide la hora de contador / delta
Const PERF_COUNTER_FRACTION = &H20000  '  divide el contador / base
Const PERF_COUNTER_BASE = &H30000      '  valor bsico que se usa en las fracciones
Const PERF_COUNTER_ELAPSED = &H40000   '  resta el contador de la hora actual
Const PERF_COUNTER_QUEUELEN = &H50000  '  usa la func. de procesamiento Queuelen
Const PERF_COUNTER_HISTOGRAM = &H60000 '  el contador comienza o termina un histograma

' Si ha seleccionado el valor PERF_TYPE_TEXT, seleccione uno de los 
' valores siguientes para indicar el tipo de datos TEXT.
Const PERF_TEXT_UNICODE = &H0          '  tipo de texto contenido en el campo de texto
Const PERF_TEXT_ASCII = &H10000        '  ASCII usando el campo CodePage

' Subtipos de cronmetro
Const PERF_TIMER_TICK = &H0            '  usa como base la frecuencia de ejecucin del sistema
Const PERF_TIMER_100NS = &H100000      '  usa unidades base de hora del cronmetro 100 NS
Const PERF_OBJECT_TIMER = &H200000     '  usa la frecuencia del cronmetro del objeto

' Cualquiera de los tipos que efectan clculos puede usar uno o ms de los indicadores 
' de modificacin de clculos, que aparecen en la lista siguiente:
Const PERF_DELTA_COUNTER = &H400000    '  calcula primero la diferencia
Const PERF_DELTA_BASE = &H800000       '  calcula tambin la diferencia de la base
Const PERF_INVERSE_COUNTER = &H1000000 '  muestra cantidad como valor 1.00 (asume que:
Const PERF_MULTI_COUNTER = &H2000000   '  suma de instancias mltiples

' Seleccione uno de los valores siguientes para indicar el sufijo de presentacin (si lo hay)
Const PERF_DISPLAY_NO_SUFFIX = &H0       '  sin sufijo
Const PERF_DISPLAY_PER_SEC = &H10000000  '  "/s"
Const PERF_DISPLAY_PERCENT = &H20000000  '  "%"
Const PERF_DISPLAY_SECONDS = &H30000000  '  "s"
Const PERF_DISPLAY_NOSHOW = &H40000000   '  no se presenta el valor

' Tipos de contadores predefinidos

' Contador de 32 bits. Divide delta entre hora delta. Presenta el sufijo: "/s"
Const PERF_COUNTER_COUNTER = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_TICK Or PERF_DELTA_COUNTER Or PERF_DISPLAY_PER_SEC)

' Cronmetro de 64 bits. Divide delta entre hora delta. Presenta el sufijo: "%"
Const PERF_COUNTER_TIMER = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_TICK Or PERF_DELTA_COUNTER Or PERF_DISPLAY_PERCENT)

' Producto Espacio-Tiempo de longitud de cola. Divide delta entre hora delta. No presenta sufijo.
Const PERF_COUNTER_QUEUELEN_TYPE = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_QUEUELEN Or PERF_TIMER_TICK Or PERF_DELTA_COUNTER Or PERF_DISPLAY_NO_SUFFIX)

' Contador de 64 bits. Divide delta entre hora delta. Presenta el sufijo: "/s"
Const PERF_COUNTER_BULK_COUNT = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_TICK Or PERF_DELTA_COUNTER Or PERF_DISPLAY_PER_SEC)

' Indica que el contador no es propiamente un contador, sino una cadena Unicode presentada como texto.
Const PERF_COUNTER_TEXT = (PERF_SIZE_VARIABLE_LEN Or PERF_TYPE_TEXT Or PERF_TEXT_UNICODE Or PERF_DISPLAY_NO_SUFFIX)

' Indica que los datos son un contador que no se debe
' usar como media de tiempo en la presentacin (como un 
' contador de errores de una lnea en serie)
' Lo presenta tal cual. No presenta sufijo.
Const PERF_COUNTER_RAWCOUNT = (PERF_SIZE_DWORD Or PERF_TYPE_NUMBER Or PERF_NUMBER_DECIMAL Or PERF_DISPLAY_NO_SUFFIX)

' Contador que es 1  0 en cada interrupcin del muestreo (% ocupado)
' Divide delta entre base delta. Presenta el sufijo: "%"
Const PERF_SAMPLE_FRACTION = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_FRACTION Or PERF_DELTA_COUNTER Or PERF_DELTA_BASE Or PERF_DISPLAY_PERCENT)

' Contador que se muestrea en cada interrupcin del muestreo (longitud de cola)
' Divide delta entre hora delta. No presenta sufijo.
Const PERF_SAMPLE_COUNTER = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_TICK Or PERF_DELTA_COUNTER Or PERF_DISPLAY_NO_SUFFIX)

' Etiqueta: no hay datos asociados con este contador (tiene longitud 0)
' No se presenta.
Const PERF_COUNTER_NODATA = (PERF_SIZE_ZERO Or PERF_DISPLAY_NOSHOW)

' Cronmetro de 64 bits invertido (es decir, mide la inactividad, pero presenta ocupado  As Integer)
' Presenta 100 deltas divididos entre hora delta. Presenta el sufijo: "%"
Const PERF_COUNTER_TIMER_INV = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_TICK Or PERF_DELTA_COUNTER Or PERF_INVERSE_COUNTER Or PERF_DISPLAY_PERCENT)

' Divisor para una muestra, usado con el contador anterior para formar un
' % de muestra. Debe comprobar que los valores son >0 antes de dividir. Este
' contador sigue directamente al contador numerador. No se debe mostrar al usuario.
Const PERF_SAMPLE_BASE = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_BASE Or PERF_DISPLAY_NOSHOW Or &H1)         '  por compatibilidad con versiones anteriores a la beta

' Cronmetro que, cuando se divide entre una base media, da como resultado
' un tiempo en segundos que es el tiempo medio de una operacin. Este
' cronmetro da el tiempo de operaciones totales y la base es el nmero de
' operaciones. Presenta el sufijo: "s"
Const PERF_AVERAGE_TIMER = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_FRACTION Or PERF_DISPLAY_SECONDS)

' Se usa como denominador en el clculo de medias de tiempo o de contador.
' Tiene que seguir directamente al contador numerador. No se muestra al 
' usuario.
Const PERF_AVERAGE_BASE = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_BASE Or PERF_DISPLAY_NOSHOW Or &H2)         '  por compatibilidad con versiones anteriores a la beta

' Contador masivo que, cuando se divide (normalmente) entre el nmero de
' operaciones, da (normalmente) el nmero de bytes por operacin.
' No presenta sufijo.
Const PERF_AVERAGE_BULK = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_FRACTION Or PERF_DISPLAY_NOSHOW)

' Cronmetro de 64 bits en unidades de 100 ns. Presenta delta divido entre
' hora delta. Presenta el sufijo: "%"
Const PERF_100NSEC_TIMER = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_100NS Or PERF_DELTA_COUNTER Or PERF_DISPLAY_PERCENT)

' Cronmetro de 64 bits invertido (es decir, mide la inactividad, pero presenta ocupado As Integer)
' Presenta 100 deltas divididos entre hora delta. Presenta el sufijo: "%"
Const PERF_100NSEC_TIMER_INV = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_100NS Or PERF_DELTA_COUNTER Or PERF_INVERSE_COUNTER Or PERF_DISPLAY_PERCENT)

' Cronmetro de 64 bits. Divide delta entre hora delta. Presenta el sufijo: "%"
' Cronmetro para mltiples instancias; por eso el resultado puede ser superior al 100%.
Const PERF_COUNTER_MULTI_TIMER = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_DELTA_COUNTER Or PERF_TIMER_TICK Or PERF_MULTI_COUNTER Or PERF_DISPLAY_PERCENT)

' Cronmetro de 64 bits invertido (es decir, mide la inactividad, pero presenta ocupado 
' As Integer). Presenta 100 _MULTI_BASE delta divido entre hora delta.
' Presenta el sufijo: "%". Cronmetro para mltiples instancias; por eso el 
' resultado puede ser superior al 100%. Seguido de un contador de tipo _MULTI_BASE.
Const PERF_COUNTER_MULTI_TIMER_INV = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_DELTA_COUNTER Or PERF_MULTI_COUNTER Or PERF_TIMER_TICK Or PERF_INVERSE_COUNTER Or PERF_DISPLAY_PERCENT)

' Nmero de instancias a las que se aplica el contador _MULTI_..._INV
' anterior. Se usa como factor para obtener el porcentaje.
Const PERF_COUNTER_MULTI_BASE = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_BASE Or PERF_MULTI_COUNTER Or PERF_DISPLAY_NOSHOW)

' Cronmetro de 64 bits en unidades de 100 ns. Presenta delta divido entre hora delta.
' Presenta el sufijo: "%" . Cronmetro para mltiples instancias; por eso el 
' resultado puede ser superior al 100%.
Const PERF_100NSEC_MULTI_TIMER = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_DELTA_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_100NS Or PERF_MULTI_COUNTER Or PERF_DISPLAY_PERCENT)

' Cronmetro de 64 bits invertido (es decir, mide la inactividad, pero presenta ocupado 
' As Integer). Presenta 100  _MULTI_BASE delta divido entre hora delta.
' Presenta el sufijo: "%". Cronmetro para mltiples instancias; por eso el 
' resultado puede ser superior al 100%. Seguido de un contador de tipo _MULTI_BASE.
Const PERF_100NSEC_MULTI_TIMER_INV = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_DELTA_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_100NS Or PERF_MULTI_COUNTER Or PERF_INVERSE_COUNTER Or PERF_DISPLAY_PERCENT)

' Indica que los datos son una fraccin del contador siguiente, que
' no se debe usar como media de tiempo de presentacin (como espacio libre
' sobre espacio total). Lo presenta tal cual. Presenta el cociente como "%".
Const PERF_RAW_FRACTION = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_FRACTION Or PERF_DISPLAY_PERCENT)

' Indica que los datos son la base para el contador anterior, que
' no se debe usar como media de tiempo de presentacin (como espacio libre
' sobre espacio total).
Const PERF_RAW_BASE = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_BASE Or PERF_DISPLAY_NOSHOW Or &H3)         '  por compatibilidad con versiones anteriores a la beta

' Los datos reunidos por este contador son en realidad la hora de inicio del
' elemento que se est midiendo. Para presentarlos, los datos se restan del
' tiempo de muestreo para dar el tiempo transcurrido como diferencia entre
' ambos. En la definicin siguiente, el campo PerfTime del objeto contiene
' el tiempo de muestreo como lo indica el bit PERF_OBJECT_TIMER y
' el campo PerfFreq del objeto escala la diferencia para convertir
' las unidades de hora en segundos.
Const PERF_ELAPSED_TIME = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_ELAPSED Or PERF_OBJECT_TIMER Or PERF_DISPLAY_SECONDS)

' Puede usar el tipo de contador siguiente con los tipos anteriores para
' definir un intervalo de valores que se presentarn en un histograma.
Const PERF_COUNTER_HISTOGRAM_TYPE = &H80000000  ' El contador comienza o termina un histograma.

' Los valores siguientes se usan para determinar el nivel de detalle
' asociado al contador. El usuario podr establecer el nivel de
' detalle que se debe mostrar en cualquier momento.
Const PERF_DETAIL_NOVICE = 100   '  Pueden entenderlo los principiantes
Const PERF_DETAIL_ADVANCED = 200 '  Para usuarios avanzados
Const PERF_DETAIL_EXPERT = 300   '  Para usuarios expertos
Const PERF_DETAIL_WIZARD = 400   '  Para el programador del sistema

Type PERF_COUNTER_DEFINITION
        ByteLength As Long
        CounterNameTitleIndex As Long
        CounterNameTitle As String
        CounterHelpTitleIndex As Long
        CounterHelpTitle As String
        DefaultScale As Long
        DetailLevel As Long
        CounterType As Long
        CounterSize As Long
        CounterOffset As Long
End Type

Const PERF_NO_UNIQUE_ID = -1

Type PERF_INSTANCE_DEFINITION
        ByteLength As Long
        ParentObjectTitleIndex As Long
        ParentObjectInstance As Long
        UniqueID As Long
        NameOffset As Long
        NameLength As Long
End Type

Type PERF_COUNTER_BLOCK
        ByteLength As Long
End Type

Const CDERR_DIALOGFAILURE = &HFFFF

Const CDERR_GENERALCODES = &H0
Const CDERR_STRUCTSIZE = &H1
Const CDERR_INITIALIZATION = &H2
Const CDERR_NOTEMPLATE = &H3
Const CDERR_NOHINSTANCE = &H4
Const CDERR_LOADSTRFAILURE = &H5
Const CDERR_FINDRESFAILURE = &H6
Const CDERR_LOADRESFAILURE = &H7
Const CDERR_LOCKRESFAILURE = &H8
Const CDERR_MEMALLOCFAILURE = &H9
Const CDERR_MEMLOCKFAILURE = &HA
Const CDERR_NOHOOK = &HB
Const CDERR_REGISTERMSGFAIL = &HC

Const PDERR_PRINTERCODES = &H1000
Const PDERR_SETUPFAILURE = &H1001
Const PDERR_PARSEFAILURE = &H1002
Const PDERR_RETDEFFAILURE = &H1003
Const PDERR_LOADDRVFAILURE = &H1004
Const PDERR_GETDEVMODEFAIL = &H1005
Const PDERR_INITFAILURE = &H1006
Const PDERR_NODEVICES = &H1007
Const PDERR_NODEFAULTPRN = &H1008
Const PDERR_DNDMMISMATCH = &H1009
Const PDERR_CREATEICFAILURE = &H100A
Const PDERR_PRINTERNOTFOUND = &H100B
Const PDERR_DEFAULTDIFFERENT = &H100C

Const CFERR_CHOOSEFONTCODES = &H2000
Const CFERR_NOFONTS = &H2001
Const CFERR_MAXLESSTHANMIN = &H2002

Const FNERR_FILENAMECODES = &H3000
Const FNERR_SUBCLASSFAILURE = &H3001
Const FNERR_INVALIDFILENAME = &H3002
Const FNERR_BUFFERTOOSMALL = &H3003

Const FRERR_FINDREPLACECODES = &H4000
Const FRERR_BUFFERLENGTHZERO = &H4001

Const CCERR_CHOOSECOLORCODES = &H5000


' Interfaz pblica para LZEXP?.LIB

'  Cdigos de devolucin de errores LZEXPAND
Const LZERROR_BADINHANDLE = (-1)  '  controlador de entrada no vlido
Const LZERROR_BADOUTHANDLE = (-2) '  controlador de salida no vlido
Const LZERROR_READ = (-3)         '  formato de archivo comprimido daado
Const LZERROR_WRITE = (-4)        '  no hay memoria para el archivo de salida
Const LZERROR_PUBLICLOC = (-5)          '  memoria insuficiente para la estructura LZFile
Const LZERROR_GLOBLOCK = (-6)     '  controlador global incorrecto
Const LZERROR_BADVALUE = (-7)     '  parmetro de entrada fuera del intervalo
Const LZERROR_UNKNOWNALG = (-8)   '  algoritmo de compresin no reconocible

Declare Function LZCopy Lib "lz32.dll" Alias "LZCopy" (ByVal hfSource As Long, ByVal hfDest As Long) As Long
Declare Function LZInit Lib "lz32.dll" Alias "LZInit" (ByVal hfSrc As Long) As Long
Declare Function GetExpandedName Lib "lz32.dll" Alias "GetExpandedNameA" (ByVal lpszSource As String, ByVal lpszBuffer As String) As Long
Declare Function LZOpenFile Lib "lz32.dll" Alias "LZOpenFileA" (ByVal lpszFile As String, lpOf As OFSTRUCT, ByVal style As Long) As Long
Declare Function LZSeek Lib "lz32.dll" Alias "LZSeek" (ByVal hfFile As Long, ByVal lOffset As Long, ByVal nOrigin As Long) As Long
Declare Function LZRead Lib "lz32.dll" Alias "LZRead" (ByVal hfFile As Long, ByVal lpvBuf As String, ByVal cbread As Long) As Long
Declare Sub LZClose Lib "lz32.dll" Alias "LZClose" (ByVal hfFile As Long)

' ********************************************************************
'       IMM.H - Definiciones del administrador de mtodos de entrada
'
'       Copyright (c) 1993-1995  Microsoft Corporation
' ********************************************************************

Const VK_PROCESSKEY = &HE5

Type COMPOSITIONFORM
        dwStyle As Long
        ptCurrentPos As POINTAPI
        rcArea As Rect
End Type

Type CANDIDATEFORM
        dwIndex As Long
        dwStyle As Long
        ptCurrentPos As POINTAPI
        rcArea As Rect
End Type

Type CANDIDATELIST
        dwSize As Long
        dwStyle As Long
        dwCount As Long
        dwSelection As Long
        dwPageStart As Long
        dwPageSize As Long
        dwOffset(1) As Long
End Type

Const STYLE_DESCRIPTION_SIZE = 32

Type STYLEBUF
        dwStyle As Long
        szDescription As String * STYLE_DESCRIPTION_SIZE
End Type
'  prototipo de la API de IMM 

Declare Function ImmInstallIME Lib "imm32.dll" Alias "ImmInstallIMEA" (ByVal lpszIMEFileName As String, ByVal lpszLayoutText As String) As Long
Declare Function ImmGetDefaultIMEWnd Lib "imm32.dll" Alias "ImmGetDefaultIMEWnd" (ByVal hwnd As Long) As Long
Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long
Declare Function ImmGetIMEFileName Lib "imm32.dll" Alias "ImmGetIMEFileNameA" (ByVal hkl As Long, ByVal lpStr As String, ByVal uBufLen As Long) As Long
Declare Function ImmGetProperty Lib "imm32.dll" Alias "ImmGetProperty" (ByVal hkl As Long, ByVal dw As Long) As Long
Declare Function ImmIsIME Lib "imm32.dll" Alias "ImmIsIME" (ByVal hkl As Long) As Long
Declare Function ImmSimulateHotKey Lib "imm32.dll" Alias "ImmSimulateHotKey" (ByVal hwnd As Long, ByVal dw As Long) As Long
Declare Function ImmCreateContext Lib "imm32.dll" Alias "ImmCreateContext" () As Long
Declare Function ImmDestroyContext Lib "imm32.dll" Alias "ImmDestroyContext" (ByVal himc As Long) As Long
Declare Function ImmGetContext Lib "imm32.dll" Alias "ImmGetContext" (ByVal hwnd As Long) As Long
Declare Function ImmReleaseContext Lib "imm32.dll" Alias "ImmReleaseContext" (ByVal hwnd As Long, ByVal himc As Long) As Long
Declare Function ImmAssociateContext Lib "imm32.dll" Alias "ImmAssociateContext" (ByVal hwnd As Long, ByVal himc As Long) As Long
Declare Function ImmGetCompositionString Lib "imm32.dll" Alias "ImmGetCompositionStringA" (ByVal himc As Long, ByVal dw As Long, lpv As Any, ByVal dw2 As Long) As Long
Declare Function ImmSetCompositionString Lib "imm32.dll" Alias "ImmSetCompositionStringA" (ByVal himc As Long, ByVal dwIndex As Long, lpComp As Any, ByVal dw As Long, lpRead As Any, ByVal dw2 As Long) As Long
Declare Function ImmGetCandidateListCount Lib "imm32.dll" Alias "ImmGetCandidateListCountA" (ByVal himc As Long, lpdwListCount As Long) As Long
Declare Function ImmGetCandidateList Lib "imm32.dll" Alias "ImmGetCandidateListA" (ByVal himc As Long, ByVal deIndex As Long, lpCandidateList As CANDIDATELIST, ByVal dwBufLen As Long) As Long
Declare Function ImmGetGuideLine Lib "imm32.dll" Alias " ImmGetGuideLineA" (ByVal himc As Long, ByVal dwIndex As Long, ByVal lpStr As String, ByVal dwBufLen As Long) As Long
Declare Function ImmGetConversionStatus Lib "imm32.dll" Alias "ImmGetConversionStatus" (ByVal himc As Long, lpdw As Long, lpdw2 As Long) As Long
Declare Function ImmSetConversionStatus Lib "imm32.dll" Alias "ImmSetConversionStatus" (ByVal himc As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long
Declare Function ImmGetOpenStatus Lib "imm32.dll" Alias "ImmGetOpenStatus" (ByVal himc As Long) As Long
Declare Function ImmSetOpenStatus Lib "imm32.dll" Alias "ImmSetOpenStatus" (ByVal himc As Long, ByVal b As Long) As Long
Declare Function ImmGetCompositionFont Lib "imm32.dll" Alias "ImmGetCompositionFontA" (ByVal himc As Long, lpLogFont As LOGFONT) As Long
Declare Function ImmSetCompositionFont Lib "imm32.dll" Alias "ImmSetCompositionFontA" (ByVal himc As Long, lpLogFont As LOGFONT) As Long
Declare Function ImmConfigureIME Lib "imm32.dll" Alias "ImmConfigureIME" (ByVal hkl As Long, ByVal hwnd As Long, ByVal dw As Long) As Long
Declare Function ImmEscape Lib "imm32.dll" Alias "ImmEscapeA" (ByVal hkl As Long, ByVal himc As Long, ByVal un As Long, lpv As Any) As Long
Declare Function ImmGetConversionList Lib "imm32.dll" Alias "ImmGetConversionListA" (ByVal hkl As Long, ByVal himc As Long, ByVal lpsz As String, lpCandidateList As CANDIDATELIST, ByVal dwBufLen As Long, ByVal uFlag As Long) As Long
Declare Function ImmNotifyIME Lib "imm32.dll" Alias "ImmNotifyIME" (ByVal himc As Long, ByVal dwAction As Long, ByVal dwIndex As Long, ByVal dwValue As Long) As Long
Declare Function ImmGetStatusWindowPos Lib "imm32.dll" Alias "ImmGetStatusWindowPos" (ByVal himc As Long, lpPoint As POINTAPI) As Long
Declare Function ImmSetStatusWindowPos Lib "imm32.dll" Alias "ImmSetStatusWindowPos" (ByVal himc As Long, lpPoint As POINTAPI) As Long
Declare Function ImmGetCompositionWindow Lib "imm32.dll" Alias "ImmGetCompositionWindow" (ByVal himc As Long, lpCompositionForm As COMPOSITIONFORM) As Long
Declare Function ImmSetCompositionWindow Lib "imm32.dll" Alias "ImmSetCompositionWindow" (ByVal himc As Long, lpCompositionForm As COMPOSITIONFORM) As Long
Declare Function ImmGetCandidateWindow Lib "imm32.dll" Alias "ImmGetCandidateWindow" (ByVal himc As Long, ByVal dw As Long, lpCandidateForm As CANDIDATEFORM) As Long
Declare Function ImmSetCandidateWindow Lib "imm32.dll" Alias "ImmSetCandidateWindow" (ByVal himc As Long, lpCandidateForm As CANDIDATEFORM) As Long
Declare Function ImmIsUIMessage Lib "imm32.dll" Alias "ImmIsUIMessageA" (ByVal hwnd As Long, ByVal un As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function ImmGetVirtualKey Lib "imm32.dll" Alias "ImmGetVirtualKey" (ByVal hwnd As Long) As Long
Declare Function ImmRegisterWord Lib "imm32.dll" Alias "ImmRegisterWordA" (ByVal hkl As Long, ByVal lpszReading As String, ByVal dw As Long, ByVal lpszRegister As String) As Long
Declare Function ImmUnregisterWord Lib "imm32.dll" Alias "ImmUnregisterWordA" (ByVal hkl As Long, ByVal lpszReading As String, ByVal dw As Long, ByVal lpszUnregister As String) As Long
Declare Function ImmGetRegisterWordStyle Lib "imm32.dll" Alias " ImmGetRegisterWordStyleA" (ByVal hkl As Long, ByVal nItem As Long, lpStyleBuf As STYLEBUF) As Long
Declare Function ImmEnumRegisterWord Lib "imm32.dll" Alias "ImmEnumRegisterWordA" (ByVal hkl As Long, ByVal RegisterWordEnumProc As Long, ByVal lpszReading As String, ByVal dw As Long, ByVal lpszRegister As String, lpv As Any) As Long
'  mensajes relacionados con IME
Const WM_CONVERTREQUESTEX = &H108
Const WM_IME_STARTCOMPOSITION = &H10D
Const WM_IME_ENDCOMPOSITION = &H10E
Const WM_IME_COMPOSITION = &H10F
Const WM_IME_KEYLAST = &H10F

Const WM_IME_SETCONTEXT = &H281
Const WM_IME_NOTIFY = &H282
Const WM_IME_CONTROL = &H283
Const WM_IME_COMPOSITIONFULL = &H284
Const WM_IME_SELECT = &H285
Const WM_IME_CHAR = &H286

Const WM_IME_KEYDOWN = &H290
Const WM_IME_KEYUP = &H291

'  wParam para WM_IME_CONTROL
Const IMC_GETCANDIDATEPOS = &H7
Const IMC_SETCANDIDATEPOS = &H8
Const IMC_GETCOMPOSITIONFONT = &H9
Const IMC_SETCOMPOSITIONFONT = &HA
Const IMC_GETCOMPOSITIONWINDOW = &HB
Const IMC_SETCOMPOSITIONWINDOW = &HC
Const IMC_GETSTATUSWINDOWPOS = &HF
Const IMC_SETSTATUSWINDOWPOS = &H10
Const IMC_CLOSESTATUSWINDOW = &H21
Const IMC_OPENSTATUSWINDOW = &H22


'  wParam para WM_IME_CONTROL del teclado
'  dwAction para ImmNotifyIME
Const NI_OPENCANDIDATE = &H10
Const NI_CLOSECANDIDATE = &H11
Const NI_SELECTCANDIDATESTR = &H12
Const NI_CHANGECANDIDATELIST = &H13
Const NI_FINALIZECONVERSIONRESULT = &H14
Const NI_COMPOSITIONSTR = &H15
Const NI_SETCANDIDATE_PAGESTART = &H16
Const NI_SETCANDIDATE_PAGESIZE = &H17

'  lParam para WM_IME_SETCONTEXT
Const ISC_SHOWUICANDIDATEWINDOW = &H1
Const ISC_SHOWUICOMPOSITIONWINDOW = &H80000000
Const ISC_SHOWUIGUIDELINE = &H40000000
Const ISC_SHOWUIALLCANDIDATEWINDOW = &HF
Const ISC_SHOWUIALL = &HC000000F

'  dwIndex para ImmNotifyIME/NI_COMPOSITIONSTR
Const CPS_COMPLETE = &H1
Const CPS_CONVERT = &H2
Const CPS_REVERT = &H3
Const CPS_CANCEL = &H4

' Id. de las teclas aceleradoras de la edicin china simplificada de Windows desde 0x10 - 0x2F
Const IME_CHOTKEY_IME_NONIME_TOGGLE = &H10
Const IME_CHOTKEY_SHAPE_TOGGLE = &H11
Const IME_CHOTKEY_SYMBOL_TOGGLE = &H12

' Id. de las teclas aceleradoras de la edicin japonesa de Windows desde 0x30 - 0x4F
Const IME_JHOTKEY_CLOSE_OPEN = &H30

' Id. de las teclas aceleradoras de la edicin coreana de Windows desde 0x50 - 0x6F
Const IME_KHOTKEY_SHAPE_TOGGLE = &H50
Const IME_KHOTKEY_HANJACONVERT = &H51
Const IME_KHOTKEY_ENGLISH = &H52

' Id. de las teclas aceleradoras de la edicin china tradicional de Windows desde 0x70 - 0x8F
Const IME_THOTKEY_IME_NONIME_TOGGLE = &H70
Const IME_THOTKEY_SHAPE_TOGGLE = &H71
Const IME_THOTKEY_SYMBOL_TOGGLE = &H72

'  Id. de la tecla aceleradora de cambio directo desde 0x100 - 0x11F
Const IME_HOTKEY_DSWITCH_FIRST = &H100
Const IME_HOTKEY_DSWITCH_LAST = &H11F

'  tecla aceleradora IME privada desde 0x200 - 0x21F
Const IME_ITHOTKEY_RESEND_RESULTSTR = &H200
Const IME_ITHOTKEY_PREVIOUS_COMPOSITION = &H201
Const IME_ITHOTKEY_UISTYLE_TOGGLE = &H202

'  parmetro de ImmGetCompositionString
Const GCS_COMPREADSTR = &H1
Const GCS_COMPREADATTR = &H2
Const GCS_COMPREADCLAUSE = &H4
Const GCS_COMPSTR = &H8
Const GCS_COMPATTR = &H10
Const GCS_COMPCLAUSE = &H20
Const GCS_CURSORPOS = &H80
Const GCS_DELTASTART = &H100
Const GCS_RESULTREADSTR = &H200
Const GCS_RESULTREADCLAUSE = &H400
Const GCS_RESULTSTR = &H800
Const GCS_RESULTCLAUSE = &H1000

'  indicadores de bits de estilo para WM_IME_COMPOSITION
Const CS_INSERTCHAR = &H2000
Const CS_NOMOVECARET = &H4000

'  bits de fdwInit de INPUTCONTEXT
'  Bits de la propiedad IME
Const IME_PROP_AT_CARET = &H10000
Const IME_PROP_SPECIAL_UI = &H20000
Const IME_PROP_CANDLIST_START_FROM_1 = &H40000
Const IME_PROP_UNICODE = &H80000

'  Bits de capacidad IME UI
Const UI_CAP_2700 = &H1
Const UI_CAP_ROT90 = &H2
Const UI_CAP_ROTANY = &H4

'  Bits de capacidad ImmSetCompositionString 
Const SCS_CAP_COMPSTR = &H1
Const SCS_CAP_MAKEREAD = &H2

'  Bits de capacidad heredada IME WM_IME_SELECT 
Const SELECT_CAP_CONVERSION = &H1
Const SELECT_CAP_SENTENCE = &H2

'  Id. para deIndex de ImmGetGuideLine
Const GGL_LEVEL = &H1
Const GGL_INDEX = &H2
Const GGL_STRING = &H3
Const GGL_PRIVATE = &H4

'  Id. para dwLevel de la estructura GUIDELINE
Const GL_LEVEL_NOGUIDELINE = &H0
Const GL_LEVEL_FATAL = &H1
Const GL_LEVEL_ERROR = &H2
Const GL_LEVEL_WARNING = &H3
Const GL_LEVEL_INFORMATION = &H4

'  Id. para dwIndex de la estructura GUIDELINE
Const GL_ID_UNKNOWN = &H0
Const GL_ID_NOMODULE = &H1
Const GL_ID_NODICTIONARY = &H10
Const GL_ID_CANNOTSAVE = &H11
Const GL_ID_NOCONVERT = &H20
Const GL_ID_TYPINGERROR = &H21
Const GL_ID_TOOMANYSTROKE = &H22
Const GL_ID_READINGCONFLICT = &H23
Const GL_ID_INPUTREADING = &H24
Const GL_ID_INPUTRADICAL = &H25
Const GL_ID_INPUTCODE = &H26
Const GL_ID_INPUTSYMBOL = &H27
Const GL_ID_CHOOSECANDIDATE = &H28
Const GL_ID_REVERSECONVERSION = &H29
Const GL_ID_PRIVATE_FIRST = &H8000
Const GL_ID_PRIVATE_LAST = &HFFFF

'  Id. para dwIndex de ImmGetProperty
Const IGP_PROPERTY = &H4
Const IGP_CONVERSION = &H8
Const IGP_SENTENCE = &HC
Const IGP_UI = &H10
Const IGP_SETCOMPSTR = &H14
Const IGP_SELECT = &H18

'  dwIndex para la API de ImmSetCompositionString 
Const SCS_SETSTR = (GCS_COMPREADSTR Or GCS_COMPSTR)
Const SCS_CHANGEATTR = (GCS_COMPREADATTR Or GCS_COMPATTR)
Const SCS_CHANGECLAUSE = (GCS_COMPREADCLAUSE Or GCS_COMPCLAUSE)

'  atributo para la estructura COMPOSITIONSTRING 
Const ATTR_INPUT = &H0
Const ATTR_TARGET_CONVERTED = &H1
Const ATTR_CONVERTED = &H2
Const ATTR_TARGET_NOTCONVERTED = &H3
Const ATTR_INPUT_ERROR = &H4

'  campo de bit para IMC_SETCOMPOSITIONWINDOW, IMC_SETCANDIDATEWINDOW
Const CFS_DEFAULT = &H0
Const CFS_RECT = &H1
Const CFS_POINT = &H2
Const CFS_SCREEN = &H4
Const CFS_FORCE_POSITION = &H20
Const CFS_CANDIDATEPOS = &H40
Const CFS_EXCLUDE = &H80

'  direccin de conversin para ImmGetConversionList
Const GCL_CONVERSION = &H1
Const GCL_REVERSECONVERSION = &H2
Const GCL_REVERSE_LENGTH = &H3

'  campo de bits para el modo de conversin
Const IME_CMODE_ALPHANUMERIC = &H0
Const IME_CMODE_NATIVE = &H1
Const IME_CMODE_CHINESE = IME_CMODE_NATIVE
Const IME_CMODE_HANGEUL = IME_CMODE_NATIVE
Const IME_CMODE_JAPANESE = IME_CMODE_NATIVE
Const IME_CMODE_KATAKANA = &H2                   '  slo en vigor bajo IME_CMODE_NATIVE
Const IME_CMODE_LANGUAGE = &H3
Const IME_CMODE_FULLSHAPE = &H8
Const IME_CMODE_ROMAN = &H10
Const IME_CMODE_CHARCODE = &H20
Const IME_CMODE_HANJACONVERT = &H40
Const IME_CMODE_SOFTKBD = &H80
Const IME_CMODE_NOCONVERSION = &H100
Const IME_CMODE_EUDC = &H200
Const IME_CMODE_SYMBOL = &H400

Const IME_SMODE_NONE = &H0
Const IME_SMODE_PLAURALCLAUSE = &H1
Const IME_SMODE_SINGLECONVERT = &H2
Const IME_SMODE_AUTOMATIC = &H4
Const IME_SMODE_PHRASEPREDICT = &H8

'  estilo de candidato
Const IME_CAND_UNKNOWN = &H0
Const IME_CAND_READ = &H1
Const IME_CAND_CODE = &H2
Const IME_CAND_MEANING = &H3
Const IME_CAND_RADICAL = &H4
Const IME_CAND_STROKE = &H5

'  wParam de la notificacin de mensajes informativos WM_IME_NOTIFY
Const IMN_CLOSESTATUSWINDOW = &H1
Const IMN_OPENSTATUSWINDOW = &H2
Const IMN_CHANGECANDIDATE = &H3
Const IMN_CLOSECANDIDATE = &H4
Const IMN_OPENCANDIDATE = &H5
Const IMN_SETCONVERSIONMODE = &H6
Const IMN_SETSENTENCEMODE = &H7
Const IMN_SETOPENSTATUS = &H8
Const IMN_SETCANDIDATEPOS = &H9
Const IMN_SETCOMPOSITIONFONT = &HA
Const IMN_SETCOMPOSITIONWINDOW = &HB
Const IMN_SETSTATUSWINDOWPOS = &HC
Const IMN_GUIDELINE = &HD
Const IMN_PRIVATE = &HE

'  cdigo de error de ImmGetCompositionString
Const IMM_ERROR_NODATA = (-1)
Const IMM_ERROR_GENERAL = (-2)

'  modo de dilogo de ImmConfigureIME
Const IME_CONFIG_GENERAL = 1
Const IME_CONFIG_REGISTERWORD = 2
Const IME_CONFIG_SELECTDICTIONARY = 3

'  modo de dilogo de ImmEscape
Const IME_ESC_QUERY_SUPPORT = &H3
Const IME_ESC_RESERVED_FIRST = &H4
Const IME_ESC_RESERVED_LAST = &H7FF
Const IME_ESC_PRIVATE_FIRST = &H800
Const IME_ESC_PRIVATE_LAST = &HFFF
Const IME_ESC_SEQUENCE_TO_INTERNAL = &H1001
Const IME_ESC_GET_EUDC_DICTIONARY = &H1003
Const IME_ESC_SET_EUDC_DICTIONARY = &H1004
Const IME_ESC_MAX_KEY = &H1005
Const IME_ESC_IME_NAME = &H1006
Const IME_ESC_SYNC_HOTKEY = &H1007
Const IME_ESC_HANJA_MODE = &H1008

'  estilo del registro de palabras
Const IME_REGWORD_STYLE_EUDC = &H1
Const IME_REGWORD_STYLE_USER_FIRST = &H80000000
Const IME_REGWORD_STYLE_USER_LAST = &HFFFF

'  tipo de teclado
'  para la edicin de Chino tradicional de Windows
Const SOFTKEYBOARD_TYPE_T1 = &H1
'  para la edicin de Chino simplificado de Windows
Const SOFTKEYBOARD_TYPE_C1 = &H2



' ***************************************************************************
' *                                                                         *
' *   mcx.h -- Este mdulo define las API MCX de Windows de 32 bits         *
' *                                                                         *
' * Copyright (c) 1990-1995, Microsoft Corp. Reservados todos los derechos. *
' *                                                                         *
' **************************************************************************/


Type MODEMDEVCAPS
        dwActualSize As Long
        dwRequiredSize As Long
        dwDevSpecificOffset As Long
        dwDevSpecificSize As Long

    '  identificacin del producto y la versin
        dwModemProviderVersion As Long
        dwModemManufacturerOffset As Long
        dwModemManufacturerSize As Long
        dwModemModelOffset As Long
        dwModemModelSize As Long
        dwModemVersionOffset As Long
        dwModemVersionSize As Long

    '  capacidades de opcin local
        dwDialOptions As Long          '  mapa de bits de los valores admitidos
        dwCallSetupFailTimer As Long   '  mximo en segundos
        dwInactivityTimeout As Long    '  mximo en segundos
        dwSpeakerVolume As Long        '  mapa de bits de los valores admitidos
        dwSpeakerMode As Long          '  mapa de bits de los valores admitidos
        dwModemOptions As Long         '  mapa de bits de los valores admitidos
        dwMaxDTERate As Long           '  valor mximo en bits/s
        dwMaxDCERate As Long           '  valor mximo en bits/s

    '  Parte variable para ampliacin de patente
        abVariablePortion(1) As Byte
End Type

Type MODEMSETTINGS
        dwActualSize As Long
        dwRequiredSize As Long
        dwDevSpecificOffset As Long
        dwDevSpecificSize As Long

    '  opciones estticas locales (lectura/escritura)
        dwCallSetupFailTimer As Long       '  segundos
        dwInactivityTimeout As Long        '  segundos
        dwSpeakerVolume As Long            '  nivel
        dwSpeakerMode As Long              '  modo
        dwPreferredModemOptions As Long    '  mapa de bits
    
    '  opciones negociadas (slo lectura) para la llamada actual o para la ltima
        dwNegotiatedModemOptions As Long   '  mapa de bits
        dwNegotiatedDCERate As Long        '  bits/s

    '  Parte variable para ampliacin de patente
        abVariablePortion(1) As Byte
End Type

'  Opciones de marcar
Const DIALOPTION_BILLING = &H40          '  Admite espera para "$" de llamada
Const DIALOPTION_QUIET = &H80            '  Admite espera para "@" silenciosa
Const DIALOPTION_DIALTONE = &H100        '  Admite espera para "W" de tono de llamada

'  Volumen de altavoz para MODEMDEVCAPS
Const MDMVOLFLAG_LOW = &H1
Const MDMVOLFLAG_MEDIUM = &H2
Const MDMVOLFLAG_HIGH = &H4

'  Volumen de altavoz para MODEMSETTINGS
Const MDMVOL_LOW = &H0
Const MDMVOL_MEDIUM = &H1
Const MDMVOL_HIGH = &H2

'  Volumen de altavoz para MODEMDEVCAPS
Const MDMSPKRFLAG_OFF = &H1
Const MDMSPKRFLAG_DIAL = &H2
Const MDMSPKRFLAG_ON = &H4
Const MDMSPKRFLAG_CALLSETUP = &H8

'  Volumen de altavoz para MODEMSETTINGS
Const MDMSPKR_OFF = &H0
Const MDMSPKR_DIAL = &H1
Const MDMSPKR_ON = &H2
Const MDMSPKR_CALLSETUP = &H3
 
'  Opciones del mdem
Const MDM_COMPRESSION = &H1
Const MDM_ERROR_CONTROL = &H2
Const MDM_FORCED_EC = &H4
Const MDM_CELLULAR = &H8
Const MDM_FLOWCONTROL_HARD = &H10
Const MDM_FLOWCONTROL_SOFT = &H20
Const MDM_CCITT_OVERRIDE = &H40
Const MDM_SPEED_ADJUST = &H80
Const MDM_TONE_DIAL = &H100
Const MDM_BLIND_DIAL = &H200
Const MDM_V23_OVERRIDE = &H400



' *****************************************************************************                                                                             *
' * shellapi.h -  Funciones, tipos y definiciones de SHELL.DLL                  *
' *                                                                             *
' * Copyright (c) 1992-1995, Microsoft Corp. Reservados todos los derechos      *
' *                                                                             *
' \*****************************************************************************/

Declare Function DragQueryFile Lib "shell32.dll" Alias "DragQueryFileA" (ByVal HDROP As Long, ByVal UINT As Long, ByVal lpStr As String, ByVal ch As Long) As Long
Declare Function DragQueryPoint Lib "shell32.dll" Alias "DragQueryPoint" (ByVal HDROP As Long, lpPoint As POINTAPI) As Long
Declare Sub DragFinish Lib "shell32.dll" Alias "DragFinish" (ByVal hDrop As Long)
Declare Sub DragAcceptFiles Lib "shell32.dll" Alias "DragAcceptFiles" (ByVal hwnd As Long, ByVal fAccept As Long)
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long

Declare Function ShellAbout Lib "shell32.dll" Alias "ShellAboutA" (ByVal hwnd As Long, ByVal szApp As String, ByVal szOtherStuff As String, ByVal hIcon As Long) As Long
Declare Function DuplicateIcon Lib "shell32.dll" Alias "DuplicateIcon" (ByVal hInst As Long, ByVal hIcon As Long) As Long
Declare Function ExtractAssociatedIcon Lib "shell32.dll" Alias "ExtractAssociateIconA" (ByVal hInst As Long, ByVal lpIconPath As String, lpiIcon As Long) As Long
Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long

Type DRAGINFO
        uSize As Long                 '  init con el tamao de (DRAGINFO)
        pt As POINTAPI
        fNC As Long
        lpFileList As String
        grfKeyState As Long
End Type

' // Contenido de la barra de aplicaciones (AppBar)

Const ABM_NEW = &H0
Const ABM_REMOVE = &H1
Const ABM_QUERYPOS = &H2
Const ABM_SETPOS = &H3
Const ABM_GETSTATE = &H4
Const ABM_GETTASKBARPOS = &H5
Const ABM_ACTIVATE = &H6               '  lParam == TRUE/FALSE significa activar/desactivar
Const ABM_GETAUTOHIDEBAR = &H7
Const ABM_SETAUTOHIDEBAR = &H8         '  puede fallar en cualquier momento. DEBE verificar el resultado
                                        '  lParam = TRUE/FALSE  Establecido/No establecido
                                        '  uEdge = borde especfico
Const ABM_WINDOWPOSCHANGED = &H9


'  los siguiente se colocan en wparam de los mensajes de devolucin de llamada
Const ABN_STATECHANGE = &H0
Const ABN_POSCHANGED = &H1
Const ABN_FULLSCREENAPP = &H2
Const ABN_WINDOWARRANGE = &H3 '  lParam == TRUE significa ocultar

'  indicadores para obtener el estado

Const ABS_AUTOHIDE = &H1
Const ABS_ALWAYSONTOP = &H2
Const ABE_LEFT = 0
Const ABE_TOP = 1
Const ABE_RIGHT = 2
Const ABE_BOTTOM = 3

Type APPBARDATA
        cbSize As Long
        hwnd As Long
        uCallbackMessage As Long
        uEdge As Long
        rc As Rect
        lParam As Long '  especfico del mensaje
End Type

Declare Function SHAppBarMessage Lib "shell32.dll" Alias "SHAppBarMessage" (ByVal dwMessage As Long, pData As APPBARDATA) As Long

' //  EndAppBar

Declare Function DoEnvironmentSubst Lib "shell32.dll" Alias "DoEnvironmentSubstA" (ByVal szString As String, ByVal cbString As Long) As Long
Declare Function FindEnvironmentString Lib "shell32.dll" Alias "FindEnvironmentStringA" (ByVal szEnvVar As String) As String

Const EIRESID = -1

Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" (ByVal lpszFile As String, ByVal nIconIndex As Long, phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long

' // Operaciones de archivo de Shell

Const FO_MOVE = &H1
Const FO_COPY = &H2
Const FO_DELETE = &H3
Const FO_RENAME = &H4
Const FOF_MULTIDESTFILES = &H1
Const FOF_CONFIRMMOUSE = &H2
Const FOF_SILENT = &H4                      '  no crear avance/informe
Const FOF_RENAMEONCOLLISION = &H8
Const FOF_NOCONFIRMATION = &H10             '  No pedir confirmacin al usuario.
Const FOF_WANTMAPPINGHANDLE = &H20          '  Llenar SHFILEOPSTRUCT.hNameMappings
                                      '  Hay que liberarlo mediante SHFreeNameMappings
Const FOF_ALLOWUNDO = &H40
Const FOF_FILESONLY = &H80                  '  en *.*, slo archivos
Const FOF_SIMPLEPROGRESS = &H100            '  significa no mostrar nombres de archivos
Const FOF_NOCONFIRMMKDIR = &H200            '  no confirmar al crear directorios necesarios

Public Const PO_DELETE = &H13           '  est eliminando la impresora
Const PO_RENAME = &H14           '  est cambiando el nombre de la impresora
Const PO_PORTCHANGE = &H20       '  cambiando el puerto donde est conectada la impresora
                                '  si est establecido este id., las cadenas que recibe
                                '  el enlace de copia son una lista de cadenas de
                                '  terminacin nula doble. El primero es el nombre de la
                                '  impresora y el segundo, el puerto de la impresora.
Const PO_REN_PORT = &H34         '  PO_RENAME y PO_PORTCHANGE al mismo tiempo.

'  no hay indicadores POF_ flags definidos actualmente

'  los parmetros implcitos son:
'       si pFrom o pTo son nombres sin cualificar, los directorios actuales
'       se toman de la configuracin de unidad/directorio global actual
'       administrada por Get/SetCurrentDrive/Directory
'
'       valores globales de confirmacin

Type SHFILEOPSTRUCT
        hwnd As Long
        wFunc As Long
        pFrom As String
        pTo As String
        fFlags As Integer
        fAnyOperationsAborted As Long
        hNameMappings As Long
        lpszProgressTitle As String '  slo se usa si FOF_SIMPLEPROGRESS
End Type

Declare Function SHFileOperation Lib "shell32.dll" Alias " SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

Declare Sub SHFreeNameMappings Lib "shell32.dll" Alias "SHFreeNameMappings" (ByVal hNameMappings As Long)

Type SHNAMEMAPPING
        pszOldPath As String
        pszNewPath As String
        cchOldPath As Long
        cchNewPath As Long
End Type

' // Fin de las operaciones de archivo de Shell

' //  Comienzo de ShellExecuteEx y familia

'  Cdigos de error de ShellExecute() y ShellExecuteEx()

'  Cdigos normales de WinExec() 
Const SE_ERR_FNF = 2                     '  archivo no encontrado
Const SE_ERR_PNF = 3                     '  ruta no encontrada
Const SE_ERR_ACCESSDENIED = 5            '  acceso denegado
Const SE_ERR_OOM = 8                     '  no hay suficiente memoria
Const SE_ERR_DLLNOTFOUND = 32

'  Observe que CLASSKEY ignora CLASSNAME
Const SEE_MASK_CLASSNAME = &H1
Const SEE_MASK_CLASSKEY = &H3
'  Observe que INVOKEIDLIST ignora IDLIST
Const SEE_MASK_IDLIST = &H4
Const SEE_MASK_INVOKEIDLIST = &HC
Const SEE_MASK_ICON = &H10
Const SEE_MASK_HOTKEY = &H20
Const SEE_MASK_NOCLOSEPROCESS = &H40
Const SEE_MASK_CONNECTNETDRV = &H80
Const SEE_MASK_FLAG_DDEWAIT = &H100
Const SEE_MASK_DOENVSUBST = &H200
Const SEE_MASK_FLAG_NO_UI = &H400

Type SHELLEXECUTEINFO
        cbSize As Long
        fMask As Long
        hwnd As Long
        lpVerb As String
        lpFile As String
        lpParameters As String
        lpDirectory As String
        nShow As Long
        hInstApp As Long
        '  campos opcionales
        lpIDList As Long
        lpClass As String
        hkeyClass As Long
        dwHotKey As Long
        hIcon As Long
        hProcess As Long
End Type

Declare Sub WinExecError Lib "shell32.dll" Alias "WinExecErrorA" (ByVal hwnd As Long, ByVal error As Long, ByVal lpstrFileName As String, ByVal lpstrTitle As String)

' //  Fin de ShellExecuteEx y familia

' // Definiciones de notificacin de bandeja

Type NOTIFYICONDATA
        cbSize As Long
        hwnd As Long
        uID As Long
        uFlags As Long
        uCallbackMessage As Long
        hIcon As Long
        szTip As String * 64
End Type

Const NIM_ADD = &H0
Const NIM_MODIFY = &H1
Const NIM_DELETE = &H2

Const NIF_MESSAGE = &H1
Const NIF_ICON = &H2
Const NIF_TIP = &H4

Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias " Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

' // Fin de los iconos de notificacin de bandeja

' // Comienzo de SHGetFileInfo

'  * La API de SHGetFileInfo proporciona una manera fcil de obtener atributos
'  * para el nombre de ruta de un archivo dado.
'  *
'  *   PARMETROS
'  *
'  *     pszPath              nombre del archivo sobre el que desea informacin
'  *     dwFileAttributes     atributos del archivo; slo se usa con SHGFI_USEFILEATTRIBUTES
'  *     psfi                 posicin para devolver la informacin del archivo
'  *     cbFileInfo           tamao de la estructura
'  *     uFlags               indicadores
'  *
'  *   DEVUELVE
'  *     TRUE si ha funcionado bien
'  */

Type SHFILEINFO
        hIcon As Long                      '  salida: icono
        iIcon As Long                      '  salida: ndice del icono
        dwAttributes As Long               '  salida: indicadores SFGAO_ flags
        szDisplayName As String * MAX_PATH '  salida: nombre de presentacin (o ruta)
        szTypeName As String * 80          '  salida: nombre de tipo
End Type

Const SHGFI_ICON = &H100                         '  obtiene un icono
Const SHGFI_DISPLAYNAME = &H200                  '  obtiene el nombre de presentacin
Const SHGFI_TYPENAME = &H400                     '  obtiene el nombre de tipo
Const SHGFI_ATTRIBUTES = &H800                   '  obtiene atributos
Const SHGFI_ICONLOCATION = &H1000                '  obtiene la ubicacin del icono
Const SHGFI_EXETYPE = &H2000                     '  devuelve el tipo de archivo exe
Const SHGFI_SYSICONINDEX = &H4000                '  obtiene el ndice de un icono del sistema
Const SHGFI_LINKOVERLAY = &H8000                 '  coloca superposicin de vnculo en icono
Const SHGFI_SELECTED = &H10000                   '  muestra el icono en estado de seleccionado
Const SHGFI_LARGEICON = &H0                      '  obtiene un icono grande
Const SHGFI_SMALLICON = &H1                      '  obtiene un icono pequeo
Const SHGFI_OPENICON = &H2                       '  obtiene un icono abierto
Const SHGFI_SHELLICONSIZE = &H4                  '  obtiene icono de tamao shell
Const SHGFI_PIDL = &H8                           '  pszPath es un pidl
Const SHGFI_USEFILEATTRIBUTES = &H10             '  usa el atributo dwFileAttribute pasado

Declare Function SHGetFileInfo Lib "shell32.dll" Alias " SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long

Declare Function SHGetNewLinkInfo Lib "shell32.dll" Alias "SHGetNewLinkInfoA" (ByVal pszLinkto As String, ByVal pszDir As String, ByVal pszName As String, pfMustCopy As Long, ByVal uFlags As Long) As Long

Const SHGNLI_PIDL = &H1                          '  pszLinkTo es un pidl
Const SHGNLI_PREFIXNAME = &H2                    '  Crea nombre "Abreviatura de xxx"

' // Fin de SHGetFileInfo


' Copyright (C) 1993 - 1995 Microsoft Corporation

' Nombre del mdulo:

'     winperf.h

' Resumen:

'     Archivo de encabezado para los datos del Monitor del sistema.

'     Este archivo contiene las definiciones de las estructuras de datos que
'     devuelve el Registro de configuracin como respuesta a una peticin de
'     datos de rendimiento. El Registro de configuracin y el Monitor del
'     sistema usan este archivo para definir su interfaz. A continuacin
'     se describe la interfaz completa, a excepcin del nombre
'     del nodo para consultar en el registro, que es:

'                    HKEY_PERFORMANCE_DATA.

'     Si consulta ese nodo con una subclave global, el que llama
'     recuperar las estructuras descritas aqu.

'     No es necesario registrar una clave de apertura con RegOpenKey() para 
'     el controlador reservado HKEY_PERFORMANCE_DATA, pero el 
'     que llama debe registrar una clave de cierre con RegCloseKey() para 
'     el controlador, para poder quitar o instalar transportes y controladores 
'     de red (lo que no puede suceder mientras estn abiertos para 
'     su supervisin). Primero hay que registrar las conexiones remotas con 
'     RegConnectRegistry().

' --*/

'   Definiciones de estructuras de datos.

'   Para que los datos se devuelvan a travs del Registro de configuracin
'   de manera independiente del sistema, tiene que estar autodefinido.

'   Todos los desplazamientos siguientes estn en bytes.

'
'   Los datos se devuelven a travs del Registro de configuracin en un
'   bloque de datos que comienza con una estructura _PERF_DATA_BLOCK.
'

'   Despus de la estructura _PERF_DATA_BLOCK est el NumObjectTypes
'   de las secciones de datos, uno por cada tipo de objeto medido. Cada seccin
'   de tipo de objeto comienza con una estructura _PERF_OBJECT_TYPE.


' *****************************************************************************                                                                             *
' * winver.h -    Funciones, tipos y definiciones de administracin de versin  *
' *                                                                             *
' *               Incluye archivo para VER.DLL. Esta biblioteca est diseada   *
' *               para poder marcar las versiones de los archivos ejecutables   *
' *               de Windows y los archivos .VER especiales para los archivos   *
' *               ejecutables de DOS.                                           *
' *                                                                             *
' *         Copyright (c) 1993, Microsoft Corp. Reservados todos los derechos.  *
' *                                                                             *
' \*****************************************************************************/

'  ----- Smbolos -----
Const VS_VERSION_INFO = 1
Const VS_USER_DEFINED = 100

'  ----- VS_VERSION.dwFileFlags -----
Const VS_FFI_SIGNATURE = &HFEEF04BD
Const VS_FFI_STRUCVERSION = &H10000
Const VS_FFI_FILEFLAGSMASK = &H3F&

'  ----- VS_VERSION.dwFileFlags -----
Const VS_FF_DEBUG = &H1&
Const VS_FF_PRERELEASE = &H2&
Const VS_FF_PATCHED = &H4&
Const VS_FF_PRIVATEBUILD = &H8&
Const VS_FF_INFOINFERRED = &H10&
Const VS_FF_SPECIALBUILD = &H20&

'  ----- VS_VERSION.dwFileOS -----
Const VOS_UNKNOWN = &H0&
Const VOS_DOS = &H10000
Const VOS_OS216 = &H20000
Const VOS_OS232 = &H30000
Const VOS_NT = &H40000

Const VOS__BASE = &H0&
Const VOS__WINDOWS16 = &H1&
Const VOS__PM16 = &H2&
Const VOS__PM32 = &H3&
Const VOS__WINDOWS32 = &H4&

Const VOS_DOS_WINDOWS16 = &H10001
Const VOS_DOS_WINDOWS32 = &H10004
Const VOS_OS216_PM16 = &H20002
Const VOS_OS232_PM32 = &H30003
Const VOS_NT_WINDOWS32 = &H40004

'  ----- VS_VERSION.dwFileType -----
Const VFT_UNKNOWN = &H0&
Const VFT_APP = &H1&
Const VFT_DLL = &H2&
Const VFT_DRV = &H3&
Const VFT_FONT = &H4&
Const VFT_VXD = &H5&
Const VFT_STATIC_LIB = &H7&

'  ----- VS_VERSION.dwFileSubtype para VFT_WINDOWS_DRV -----
Const VFT2_UNKNOWN = &H0&
Const VFT2_DRV_PRINTER = &H1&
Const VFT2_DRV_KEYBOARD = &H2&
Const VFT2_DRV_LANGUAGE = &H3&
Const VFT2_DRV_DISPLAY = &H4&
Const VFT2_DRV_MOUSE = &H5&
Const VFT2_DRV_NETWORK = &H6&
Const VFT2_DRV_SYSTEM = &H7&
Const VFT2_DRV_INSTALLABLE = &H8&
Const VFT2_DRV_SOUND = &H9&
Const VFT2_DRV_COMM = &HA&
Const VFT2_DRV_INPUTMETHOD = &HB&

'  ----- VS_VERSION.dwFileSubtype para VFT_WINDOWS_FONT -----
Const VFT2_FONT_RASTER = &H1&
Const VFT2_FONT_VECTOR = &H2&
Const VFT2_FONT_TRUETYPE = &H3&

'  ----- Indicadores de VerFindFile() -----
Const VFFF_ISSHAREDFILE = &H1

Const VFF_CURNEDEST = &H1
Const VFF_FILEINUSE = &H2
Const VFF_BUFFTOOSMALL = &H4

'  ----- Indicadores de VerInstallFile() -----
Const VIFF_FORCEINSTALL = &H1
Const VIFF_DONTDELETEOLD = &H2

Const VIF_TEMPFILE = &H1&
Const VIF_MISMATCH = &H2&
Const VIF_SRCOLD = &H4&

Const VIF_DIFFLANG = &H8&
Const VIF_DIFFCODEPG = &H10&
Const VIF_DIFFTYPE = &H20&

Const VIF_WRITEPROT = &H40&
Const VIF_FILEINUSE = &H80&
Const VIF_OUTOFSPACE = &H100&
Const VIF_ACCESSVIOLATION = &H200&
Const VIF_SHARINGVIOLATION = &H400&
Const VIF_CANNOTCREATE = &H800&
Const VIF_CANNOTDELETE = &H1000&
Const VIF_CANNOTRENAME = &H2000&
Const VIF_CANNOTDELETECUR = &H4000&
Const VIF_OUTOFMEMORY = &H8000&

Const VIF_CANNOTREADSRC = &H10000
Const VIF_CANNOTREADDST = &H20000
Const VIF_BUFFTOOSMALL = &H40000

'  ----- Tipos y estructuras -----

Type VS_FIXEDFILEINFO
        dwSignature As Long
        dwStrucVersion As Long         '  p. ej. 0x00000042 = "0,42"
        dwFileVersionMS As Long        '  p. ej. 0x00030075 = "3,75"
        dwFileVersionLS As Long        '  p. ej. 0x00000031 = "0,31"
        dwProductVersionMS As Long     '  p. ej. 0x00030010 = "3,10"
        dwProductVersionLS As Long     '  p. ej. 0x00000031 = "0,31"
        dwFileFlagsMask As Long        '  = 0x3F para la versin "0,42"
        dwFileFlags As Long            '  p. ej. VFF_DEBUG Or VFF_PRERELEASE
        dwFileOS As Long               '  p. ej. VOS_DOS_WINDOWS16
        dwFileType As Long             '  p. ej. VFT_DRIVER
        dwFileSubtype As Long          '  p. ej. VFT2_DRV_KEYBOARD
        dwFileDateMS As Long           '  p. ej. 0
        dwFileDateLS As Long           '  p. ej. 0
End Type

'  ----- Prototipos de funciones -----

Declare Function VerFindFile Lib "version.dll" Alias "VerFindFileA" (ByVal uFlags As Long, ByVal szFileName As String, ByVal szWinDir As String, ByVal szAppDir As String, ByVal szCurDir As String, lpuCurDirLen As Long, ByVal szDestDir As String, lpuDestDirLen As Long) As Long
Declare Function VerInstallFile Lib "version.dll" Alias " VerInstallFileA" (ByVal uFlags As Long, ByVal szSrcFileName As String, ByVal szDestFileName As String, ByVal szSrcDir As String, ByVal szDestDir As String, ByVal szCurDir As String, ByVal szTmpFile As String, lpuTmpFileLen As Long) As Long

'  Devuelve el tamao de la informacin de la versin en bytes
Declare Function GetFileVersionInfoSize Lib "version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long

'  Lee la informacin de la versin en el bfer
' /* Longitud del bfer para informacin *
' /* Informacin desde GetFileVersionSize *
' /* Nombre del archivo con marca de versin *
Declare Function GetFileVersionInfo Lib "version.dll"  Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwHandle As Long, ByVal dwLen As Long, lpData As Any) As Long
Declare Function VerLanguageName Lib "kernel32" Alias "VerLanguageNameA" (ByVal wLang As Long, ByVal szLang As String, ByVal nSize As Long) As Long
Declare Function VerQueryValue Lib "version.dll" Alias "VerQueryValue" (pBlock As Any, ByVal lpSubBlock As String, ByVal lplpBuffer As Long, puLen As Long) As Long

' **************************************************************************
' *                                                                         *
' *   winbase.h -- Este mdulo define las API base de Windows de 32 bits    *
' *                                                                         *
' * Copyright (c) 1990-1995, Microsoft Corp. Reservados todos los derechos. *
' *                                                                         *
' **************************************************************************/
Type ICONMETRICS
	cbSize As Long
	iHorzSpacing As Long
	iVertSpacing As Long
	iTitleWrap As Long
	lfFont As LOGFONT
End Type

Type HELPINFO
	cbSize As Long
	iContextType As Long
	iCtrlId As Long
	hItemHandle As Long
	dwContextId As Long
	MousePos As POINTAPI
End Type

Type ANIMATIONINFO
	cbSize As Long
	iMinAnimate As Long
End Type

Type MINIMIZEDMETRICS
	cbSize As Long
	iWidth As Long
	iHorzGap As Long
	iVertGap As Long
	iArrange As Long
	lfFont As LOGFONT
End Type

'  Define los accesorios de la API para la importacin directa de referencias de la DLL.
Declare Function HeapValidate Lib "kernel32" Alias "HeapValidate" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
Declare Function HeapCompact Lib "kernel32" Alias "HeapCompact" (ByVal hHeap As Long, ByVal dwFlags As Long) As Long

Const PROCESS_HEAP_REGION = &H1
Const PROCESS_HEAP_UNCOMMITTED_RANGE = &H2
Const PROCESS_HEAP_ENTRY_BUSY = &H4
Const PROCESS_HEAP_ENTRY_MOVEABLE = &H10
Const PROCESS_HEAP_ENTRY_DDESHARE = &H20

Declare Function HeapLock Lib "kernel32" Alias "HeapLock" (ByVal hHeap As Long) As Long
Declare Function HeapUnlock Lib "kernel32" Alias "HeapUnlock" (ByVal hHeap As Long) As Long

'  Valores de retorno de GetBinaryType.

Const SCS_32BIT_BINARY = 0
Const SCS_DOS_BINARY = 1
Const SCS_WOW_BINARY = 2
Const SCS_PIF_BINARY = 3
Const SCS_POSIX_BINARY = 4
Const SCS_OS216_BINARY = 5

Declare Function GetBinaryType Lib "kernel32" Alias "GetBinaryTypeA" (ByVal lpApplicationName As String, lpBinaryType As Long) As Long

Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
Declare Function GetProcessAffinityMask Lib "kernel32" Alias "GetProcessAffinityMask" (ByVal hProcess As Long, lpProcessAffinityMask As Long, SystemAffinityMask As Long) As Long

'  API de soporte de inicio de sesin

Const LOGON32_LOGON_INTERACTIVE = 2
Const LOGON32_LOGON_BATCH = 4
Const LOGON32_LOGON_SERVICE = 5

Const LOGON32_PROVIDER_DEFAULT = 0
Const LOGON32_PROVIDER_WINNT35 = 1

Declare Function LogonUser Lib "kernel32" Alias "LogonUserA" (ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As Long, ByVal dwLogonProvider As Long, phToken As Long) As Long

Declare Function ImpersonateLoggedOnUser Lib "kernel32" Alias "ImpersonateLoggedOnUser" (ByVal hToken As Long) As Long
Declare Function CreateProcessAsUser Lib "advapi32.dll" Alias "CreateProcessAsUserA" (ByVal hToken As Long, ByVal lpApplicationName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As SECURITY_ATTRIBUTES, ByVal lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As String, ByVal lpCurrentDirectory As String, ByVal lpStartupInfo As STARTUPINFO, ByVal lpProcessInformation As PROCESS_INFORMATION) As Long

'  API del contador del sistema

Type OSVERSIONINFO
        dwOSVersionInfoSize As Long
        dwMajorVersion As Long
        dwMinorVersion As Long
        dwBuildNumber As Long
        dwPlatformId As Long
        szCSDVersion As String * 128      '  Cadena de mantenimiento para uso de PSS 
End Type

'  Definiciones de dwPlatformId:
'
Const VER_PLATFORM_WIN32s = 0
Const VER_PLATFORM_WIN32_WINDOWS = 1
Const VER_PLATFORM_WIN32_NT = 2

Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByVal lpVersionInformation As OSVERSIONINFO) As Long

'  API de administracin de alimentacin

Const AC_LINE_OFFLINE = &H0
Const AC_LINE_ONLINE = &H1
Const AC_LINE_BACKUP_POWER = &H2
Const AC_LINE_UNKNOWN = &HFF
Const BATTERY_FLAG_HIGH = &H1
Const BATTERY_FLAG_LOW = &H2
Const BATTERY_FLAG_CRITICAL = &H4
Const BATTERY_FLAG_CHARGING = &H8
Const BATTERY_FLAG_NO_BATTERY = &H80
Const BATTERY_FLAG_UNKNOWN = &HFF
Const BATTERY_PERCENTAGE_UNKNOWN = &HFF
Const BATTERY_LIFE_UNKNOWN = &HFFFF

Type SYSTEM_POWER_STATUS
        ACLineStatus As Byte
        BatteryFlag As Byte
        BatteryLifePercent As Byte
        Reserved1 As Byte
        BatteryLifeTime As Long
        BatteryFullLifeTime As Long
End Type

Declare Function GetSystemPowerStatus Lib "kernel32" Alias "GetSystemPowerStatus" (lpSystemPowerStatus As SYSTEM_POWER_STATUS) As Long
Declare Function SetSystemPowerState Lib "kernel32" Alias "SetSystemPowerState" (ByVal fSuspend As Long, ByVal fForce As Long) As Long

' *   commdlg.h -- Este mdulo define las API de dilogo comn de 32 bits      *

Type OPENFILENAME
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
End Type

Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long

Declare Function GetFileTitle Lib "comdlg32.dll" Alias "GetFileTitleA" (ByVal lpszFile As String, ByVal lpszTitle As String, ByVal cbBuf As Integer) As Integer

Const OFN_READONLY = &H1
Const OFN_OVERWRITEPROMPT = &H2
Const OFN_HIDEREADONLY = &H4
Const OFN_NOCHANGEDIR = &H8
Const OFN_SHOWHELP = &H10
Const OFN_ENABLEHOOK = &H20
Const OFN_ENABLETEMPLATE = &H40
Const OFN_ENABLETEMPLATEHANDLE = &H80
Const OFN_NOVALIDATE = &H100
Const OFN_ALLOWMULTISELECT = &H200
Const OFN_EXTENSIONDIFFERENT = &H400
Const OFN_PATHMUSTEXIST = &H800
Const OFN_FILEMUSTEXIST = &H1000
Const OFN_CREATEPROMPT = &H2000
Const OFN_SHAREAWARE = &H4000
Const OFN_NOREADONLYRETURN = &H8000
Const OFN_NOTESTFILECREATE = &H10000
Const OFN_NONETWORKBUTTON = &H20000
Const OFN_NOLONGNAMES = &H40000                      '  exige nombre no largos para mdulos 4.x
Const OFN_EXPLORER = &H80000                         '  nueva apariencia de commdlg
Const OFN_NODEREFERENCELINKS = &H100000
Const OFN_LONGNAMES = &H200000                       '  exige nombres largos para mdulos 3.x

Const OFN_SHAREFALLTHROUGH = 2
Const OFN_SHARENOWARN = 1
Const OFN_SHAREWARN = 0

Type NMHDR
    hwndFrom As Long
    idfrom As Long
    code As Long
End Type

Type OFNOTIFY
        hdr As NMHDR
        lpOFN As OPENFILENAME
        pszFile As String        '  Puede ser NULL
End Type

Const CDM_FIRST = (WM_USER + 100)
Const CDM_LAST = (WM_USER + 200)
Const CDM_GETSPEC = (CDM_FIRST + &H0)
Const CDM_GETFILEPATH = (CDM_FIRST + &H1)
Const CDM_GETFOLDERPATH = (CDM_FIRST + &H2)
Const CDM_GETFOLDERIDLIST = (CDM_FIRST + &H3)
Const CDM_SETCONTROLTEXT = (CDM_FIRST + &H4)
Const CDM_HIDECONTROL = (CDM_FIRST + &H5)
Const CDM_SETDEFEXT = (CDM_FIRST + &H6)

Type CHOOSECOLOR
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        rgbResult As Long
        lpCustColors As Long
        flags As Long
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
End Type

Declare Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As CHOOSECOLOR) As Long

Const CC_RGBINIT = &H1
Const CC_FULLOPEN = &H2
Const CC_PREVENTFULLOPEN = &H4
Const CC_SHOWHELP = &H8
Const CC_ENABLEHOOK = &H10
Const CC_ENABLETEMPLATE = &H20
Const CC_ENABLETEMPLATEHANDLE = &H40
Const CC_SOLIDCOLOR = &H80
Const CC_ANYCOLOR = &H100

Type FINDREPLACE
        lStructSize As Long         '  tamao de esta estructura 0x20
        hwndOwner As Long           '  controlador para la ventana del propietario
        hInstance As Long           '  controlador de instancias de .EXE que
                                    '    contiene una plantilla de dilogo personalizado
        flags As Long               '  uno o ms FR_??
        lpstrFindWhat As String     '  puntero a cadena de bsqueda
        lpstrReplaceWith As String  '  puntero a cadena de reemplazo
        wFindWhatLen As Integer     '  tamao del bfer de bsqueda
        wReplaceWithLen As Integer  '  tamao del bfer de reemplazo
        lCustData As Long           '  datos que pasan a la funcin enlazada
        lpfnHook As Long            '  puntero a la funcin enlazada o NULL
        lpTemplateName As String    '  nombre de la plantilla personalizada
End Type

Const FR_DOWN = &H1
Const FR_WHOLEWORD = &H2
Const FR_MATCHCASE = &H4
Const FR_FINDNEXT = &H8
Const FR_REPLACE = &H10
Const FR_REPLACEALL = &H20
Const FR_DIALOGTERM = &H40
Const FR_SHOWHELP = &H80
Const FR_ENABLEHOOK = &H100
Const FR_ENABLETEMPLATE = &H200
Const FR_NOUPDOWN = &H400
Const FR_NOMATCHCASE = &H800
Const FR_NOWHOLEWORD = &H1000
Const FR_ENABLETEMPLATEHANDLE = &H2000
Const FR_HIDEUPDOWN = &H4000
Const FR_HIDEMATCHCASE = &H8000
Const FR_HIDEWHOLEWORD = &H10000

Declare Function FindText Lib "comdlg32.dll" Alias "FindTextA " (pFindreplace As FINDREPLACE) As Long

Declare Function ReplaceText Lib "comdlg32.dll" Alias "ReplaceTextA" (pFindreplace As FINDREPLACE) As Long

Type CHOOSEFONT
        lStructSize As Long
        hwndOwner As Long          '  controlador de ventana del que llama
        hdc As Long                '  impresora DC/IC o NULL
        lpLogFont As Long
        iPointSize As Long         '  10 * tamao de fuente seleccionada en puntos
        flags As Long              '  indicadores de tipo enumerados
        rgbColors As Long          '  color de texto que se devuelve
        lCustData As Long          '  datos pasados a la funcin enlazada
        lpfnHook As Long           '  puntero a funcin enlazada
        lpTemplateName As String   '  nombre de la plantilla personalizada
        hInstance As Long          '  controlador de instancias de .EXE que
                                   '    contiene una plantilla de dilogo personalizada
        lpszStyle As String        '  aqu devuelve el campo de estilo
                                   '  debe ser LF_FACESIZE o mayor
        nFontType As Integer       '  el mismo valor que el enviado a EnumFonts
                                   '    vuelve a llamar con los bits extra de FONTTYPE_
                                   '    agregados
        MISSING_ALIGNMENT As Integer
        nSizeMin As Long           '  tamao de puntos mnimo permitido &
        nSizeMax As Long           '  tamao de puntos mximo si
                                   '    se usa CF_LIMITSIZE
End Type

Declare Function ChooseFont Lib "comdlg32.dll" Alias "ChooseFontA" (pChoosefont As CHOOSEFONT) As Long

Const CF_SCREENFONTS = &H1
Const CF_PRINTERFONTS = &H2
Const CF_BOTH = (CF_SCREENFONTS Or CF_PRINTERFONTS)
Const CF_SHOWHELP = &H4&
Const CF_ENABLEHOOK = &H8&
Const CF_ENABLETEMPLATE = &H10&
Const CF_ENABLETEMPLATEHANDLE = &H20&
Const CF_INITTOLOGFONTSTRUCT = &H40&
Const CF_USESTYLE = &H80&
Const CF_EFFECTS = &H100&
Const CF_APPLY = &H200&
Const CF_ANSIONLY = &H400&
Const CF_SCRIPTSONLY = CF_ANSIONLY
Const CF_NOVECTORFONTS = &H800&
Const CF_NOOEMFONTS = CF_NOVECTORFONTS
Const CF_NOSIMULATIONS = &H1000&
Const CF_LIMITSIZE = &H2000&
Const CF_FIXEDPITCHONLY = &H4000&
Const CF_WYSIWYG = &H8000 '  debe tener tambin CF_SCREENFONTS CF_PRINTERFONTS
Const CF_FORCEFONTEXIST = &H10000
Const CF_SCALABLEONLY = &H20000
Const CF_TTONLY = &H40000
Const CF_NOFACESEL = &H80000
Const CF_NOSTYLESEL = &H100000
Const CF_NOSIZESEL = &H200000
Const CF_SELECTSCRIPT = &H400000
Const CF_NOSCRIPTSEL = &H800000
Const CF_NOVERTFONTS = &H1000000

Const SIMULATED_FONTTYPE = &H8000
Const PRINTER_FONTTYPE = &H4000
Const SCREEN_FONTTYPE = &H2000
Const BOLD_FONTTYPE = &H100
Const ITALIC_FONTTYPE = &H200
Const REGULAR_FONTTYPE = &H400

Const WM_CHOOSEFONT_GETLOGFONT = (WM_USER + 1)
Const WM_CHOOSEFONT_SETLOGFONT = (WM_USER + 101)
Const WM_CHOOSEFONT_SETFLAGS = (WM_USER + 102)

Const LBSELCHSTRING = "commdlg_LBSelChangedNotify"
Const SHAREVISTRING = "commdlg_ShareViolation"
Const FILEOKSTRING = "commdlg_FileNameOK"
Const COLOROKSTRING = "commdlg_ColorOK"
Const SETRGBSTRING = "commdlg_SetRGBColor"
Const HELPMSGSTRING = "commdlg_help"
Const FINDMSGSTRING = "commdlg_FindReplace"

Const CD_LBSELNOITEMS = -1
Const CD_LBSELCHANGE = 0
Const CD_LBSELSUB = 1
Const CD_LBSELADD = 2

Type PRINTDLG
        lStructSize As Long
        hwndOwner As Long
        hDevMode As Long
        hDevNames As Long
        hdc As Long
        flags As Long
        nFromPage As Integer
        nToPage As Integer
        nMinPage As Integer
        nMaxPage As Integer
        nCopies As Integer
        hInstance As Long
        lCustData As Long
        lpfnPrintHook As Long
        lpfnSetupHook As Long
        lpPrintTemplateName As String
        lpSetupTemplateName As String
        hPrintTemplate As Long
        hSetupTemplate As Long
End Type

Declare Function PrintDlg Lib "comdlg32.dll" Alias "PrintDlgA" (pPrintdlg As PRINTDLG) As Long

Const PD_ALLPAGES = &H0
Const PD_SELECTION = &H1
Const PD_PAGENUMS = &H2
Const PD_NOSELECTION = &H4
Const PD_NOPAGENUMS = &H8
Const PD_COLLATE = &H10
Const PD_PRINTTOFILE = &H20
Const PD_PRINTSETUP = &H40
Const PD_NOWARNING = &H80
Const PD_RETURNDC = &H100
Const PD_RETURNIC = &H200
Const PD_RETURNDEFAULT = &H400
Const PD_SHOWHELP = &H800
Const PD_ENABLEPRINTHOOK = &H1000
Const PD_ENABLESETUPHOOK = &H2000
Const PD_ENABLEPRINTTEMPLATE = &H4000
Const PD_ENABLESETUPTEMPLATE = &H8000
Const PD_ENABLEPRINTTEMPLATEHANDLE = &H10000
Const PD_ENABLESETUPTEMPLATEHANDLE = &H20000
Const PD_USEDEVMODECOPIES = &H40000
Const PD_USEDEVMODECOPIESANDCOLLATE = &H40000
Const PD_DISABLEPRINTTOFILE = &H80000
Const PD_HIDEPRINTTOFILE = &H100000
Const PD_NONETWORKBUTTON = &H200000

Type DEVNAMES
        wDriverOffset As Integer
        wDeviceOffset As Integer
        wOutputOffset As Integer
        wDefault As Integer
End Type

Const DN_DEFAULTPRN = &H1

Declare Function CommDlgExtendedError Lib "comdlg32.dll" Alias "CommDlgExtendedError" () As Long

Const WM_PSD_PAGESETUPDLG = (WM_USER)
Const WM_PSD_FULLPAGERECT = (WM_USER + 1)
Const WM_PSD_MINMARGINRECT = (WM_USER + 2)
Const WM_PSD_MARGINRECT = (WM_USER + 3)
Const WM_PSD_GREEKTEXTRECT = (WM_USER + 4)
Const WM_PSD_ENVSTAMPRECT = (WM_USER + 5)
Const WM_PSD_YAFULLPAGERECT = (WM_USER + 6)

Type PAGESETUPDLG
        lStructSize As Long
        hwndOwner As Long
        hDevMode As Long
        hDevNames As Long
        flags As Long
        ptPaperSize As POINTAPI
        rtMinMargin As Rect
        rtMargin As Rect
        hInstance As Long
        lCustData As Long
        lpfnPageSetupHook As Long
        lpfnPagePaintHook As Long
        lpPageSetupTemplateName As String
        hPageSetupTemplate As Long
End Type

Declare Function PageSetupDlg Lib "comdlg32.dll" Alias "PageSetupDlgA" (pPagesetupdlg As PAGESETUPDLG) As Long

Const PSD_DEFAULTMINMARGINS = &H0   '  predeterminado (por la impresora)
Const PSD_INWININIINTLMEASURE = &H0 '  primero de 4 posibles

Const PSD_MINMARGINS = &H1 '  usa los del que llama
Const PSD_MARGINS = &H2 '  usa los del que llama
Const PSD_INTHOUSANDTHSOFINCHES = &H4 '  segundo de 4 posibles
Const PSD_INHUNDREDTHSOFMILLIMETERS = &H8 '  tercero de 4 posibles
Const PSD_DISABLEMARGINS = &H10
Const PSD_DISABLEPRINTER = &H20
Const PSD_NOWARNING = &H80 '  debe ser igual que PD_*
Const PSD_DISABLEORIENTATION = &H100
Const PSD_RETURNDEFAULT = &H400 '  debe ser igual que PD_*
Const PSD_DISABLEPAPER = &H200
Const PSD_SHOWHELP = &H800 '  debe ser igual que PD_*
Const PSD_ENABLEPAGESETUPHOOK = &H2000 '  debe ser igual que PD_*
Const PSD_ENABLEPAGESETUPTEMPLATE = &H8000 '  debe ser igual que PD_*
Const PSD_ENABLEPAGESETUPTEMPLATEHANDLE = &H20000 '  debe ser igual que PD_*
Const PSD_ENABLEPAGEPAINTHOOK = &H40000
Const PSD_DISABLEPAGEPAINTING = &H80000

Declare Function DdeInitialize Lib "user32" Alias "DdeInitializeA" (pidInst As Long, ByVal pfnCallback As Long, ByVal afCmd As Long, ByVal ulRes As Long) As Integer
Declare Function SetServiceBits Lib "advapi32" Alias "SetServiceBits" (ByVal hServiceStatus As Long, ByVal dwServiceBits As Long, ByVal bSetBitsOn As Boolean, ByVal bUpdateImmediately As Boolean) As Long
Declare Function CopyLZFile Lib "lz32" Alias "CopyLZFile" (ByVal n1 As Long, ByVal n2 As Long) As Long
Declare Function LZStart Lib "lz32" Alias "LZStart" () As Long
Declare Sub LZDone Lib "lz32" Alias "LZDone" ()
Declare Function mciGetYieldProc Lib "winmm" Alias "mciGetYieldProc" (ByVal mciId As Long, pdwYieldData As Long) As Long
Declare Function mciSetYieldProc Lib "winmm" Alias "mciSetYieldProc" (ByVal mciId As Long, ByVal fpYieldProc As Long, ByVal dwYieldData As Long) As Long
Declare Function midiOutGetNumDevs Lib "winmm" Alias "midiOutGetNumDevs" () As Integer
Declare Function mmioInstallIOProcA Lib "winmm" Alias "mmioInstallIOProcA" (ByVal fccIOProc As String * 4, ByVal pIOProc As Long, ByVal dwFlags As Long) As Long
Declare Function CommandLineToArgv Lib "shell32" Alias "CommandLineToArgvW" (ByVal lpCmdLine As String, pNumArgs As Integer) As Long
Declare Function IsTextUnicode Lib "advapi32" Alias "IsTextUnicode" (lpBuffer As Any, ByVal cb As Long, lpi As Long) As Long
Declare Function NotifyChangeEventLog Lib "advapi32" Alias "NotifyChangeEventLog" (ByVal hEventLog As Long, ByVal hEvent As Long) As Long
Declare Function SetThreadToken Lib "advapi32" Alias "SetThreadToken" (Thread As Long, ByVal Token As Long) As Long

Type COMMCONFIG
    dwSize As Long
    wVersion As Integer
    wReserved As Integer
    dcbx As DCB
    dwProviderSubType As Long
    dwProviderOffset As Long
    dwProviderSize As Long
    wcProviderData As Byte
End Type

Declare Function CommConfigDialog Lib "kernel32" Alias "CommConfigDialogA" (ByVal lpszName As String, ByVal hWnd As Long, lpCC As COMMCONFIG) As Long
Declare Function CreateIoCompletionPort Lib "kernel32" Alias "CreateIoCompletionPort" (ByVal FileHandle As Long, ByVal ExistingCompletionPort As Long, ByVal CompletionKey As Long, ByVal NumberOfConcurrentThreads As Long) As Long
Declare Function DisableThreadLibraryCalls Lib "kernel32" Alias "DisableThreadLibraryCalls" (ByVal hLibModule As Long) As Long
Declare Function EnumResourceLanguages Lib "kernel32" Alias "EnumResourceLanguagesA" (ByVal hModule As Long, ByVal lpType As String, ByVal lpName As String, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function EnumResourceNames Lib "kernel32" Alias "EnumResourceNamesA" (ByVal hModule As Long, ByVal lpType As String, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function EnumResourceTypes Lib "kernel32" Alias "EnumResourceTypesA" (ByVal hModule As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function FreeEnvironmentStrings Lib "kernel32" Alias "FreeEnvironmentStringsA" (ByVal lpsz As String) As Long

Declare Sub FreeLibraryAndExitThread Lib "kernel32" Alias "FreeLibraryAndExitThread" (ByVal hLibModule As Long, ByVal dwExitCode As Long)
Declare Function FreeResource Lib "kernel32" Alias "FreeResource" (ByVal hResData As Long) As Long
Declare Function GetCommConfig Lib "kernel32" Alias "GetCommConfig" (ByVal hCommDev As Long, lpCC As COMMCONFIG, lpdwSize As Long) As Long
Declare Function GetCompressedFileSize Lib "kernel32" Alias "GetCompressedFileSizeA" (ByVal lpFileName As String, lpFileSizeHigh As Long) As Long
Declare Function GetDefaultCommConfig Lib "kernel32" Alias "GetDefaultCommConfigA" (ByVal lpszName As String, lpCC As COMMCONFIG, lpdwSize As Long) As Long
Declare Function GetHandleInformation Lib "kernel32" Alias "GetHandleInformation" (ByVal hObject As Long, lpdwFlags As Long) As Long
Declare Function GetProcessHeaps Lib "kernel32" Alias "GetProcessHeaps" (ByVal NumberOfHeaps As Long, ProcessHeaps As Long) As Long
Declare Function GetProcessWorkingSetSize Lib "kernel32" Alias "GetProcessWorkingSetSize" (ByVal hProcess As Long, lpMinimumWorkingSetSize As Long, lpMaximumWorkingSetSize As Long) As Long
Declare Function GetQueuedCompletionStatus Lib "kernel32" Alias "GetQueuedCompletionStatus" (ByVal CompletionPort As Long, lpNumberOfBytesTransferred As Long, lpCompletionKey As Long, lpOverlapped As Long, ByVal dwMilliseconds As Long) As Long
Declare Function GetSystemTimeAdjustment Lib "kernel32" Alias "GetSystemTimeAdjustment" (lpTimeAdjustment As Long, lpTimeIncrement As Long, lpTimeAdjustmentDisabled As Long) As Long

Declare Function GlobalCompact Lib "kernel32" Alias "GlobalCompact" (ByVal dwMinFree As Long) As Long
Declare Sub GlobalFix Lib "kernel32" Alias "GlobalFix" (ByVal hMem As Long)
Declare Sub GlobalUnfix Lib "kernel32" Alias "GlobalUnfix" (ByVal hMem As Long)
Declare Function GlobalWire Lib "kernel32" Alias "GlobalWire" (ByVal hMem As Long) As Long
Declare Function GlobalUnWire Lib "kernel32" Alias "GlobalUnWire" (ByVal hMem As Long) As Long

Declare Function IsBadCodePtr Lib "kernel32" Alias "IsBadCodePtr" (ByVal lpfn As Long) As Long
Declare Function LocalCompact Lib "kernel32" Alias "LocalCompact" (ByVal uMinFree As Long) As Long
Declare Function LocalShrink Lib "kernel32" Alias "LocalShrink" (ByVal hMem As Long, ByVal cbNewSize As Long) As Long
Declare Sub ZeroMemory Lib "KERNEL32" Alias "RtlMoveMemory"  (dest As Any, ByVal numBytes As Long)
Declare Function ReadFileEx Lib "kernel32" Alias "ReadFileEx" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpOverlapped As OVERLAPPED, ByVal lpCompletionRoutine As Long) As Long

Declare Function SetCommConfig Lib "kernel32" Alias "SetCommConfig" (ByVal hCommDev As Long, lpCC As COMMCONFIG, ByVal dwSize As Long) As Long
Declare Function SetDefaultCommConfig Lib "kernel32" Alias "SetDefaultCommConfigA" (ByVal lpszName As String, lpCC As COMMCONFIG, ByVal dwSize As Long) As Long
Declare Sub SetFileApisToANSI Lib "kernel32" Alias "SetFileApisToANSI" ()
Declare Function SetHandleInformation Lib "kernel32" Alias "SetHandleInformation" (ByVal hObject As Long, ByVal dwMask As Long, ByVal dwFlags As Long) As Long
Declare Function SetProcessWorkingSetSize Lib "kernel32" Alias "SetProcessWorkingSetSize" (ByVal hProcess As Long, ByVal dwMinimumWorkingSetSize As Long, ByVal dwMaximumWorkingSetSize As Long) As Long

Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Declare Function lstrcpyn Lib "kernel32" Alias "lstrcpynA" (ByVal lpString1 As String, ByVal lpString2 As String, ByVal iMaxLength As Long) As Long
Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Declare Function SetSystemTimeAdjustment Lib "kernel32" Alias "SetSystemTimeAdjustment" (ByVal dwTimeAdjustment As Long, ByVal bTimeAdjustmentDisabled As Boolean) As Long
Declare Function SetThreadAffinityMask Lib "kernel32" Alias "SetThreadAffinityMask" (ByVal hThread As Long, ByVal dwThreadAffinityMask As Long) As Long
Declare Function SetUnhandledExceptionFilter Lib "kernel32" Alias "SetUnhandledExceptionFilter" (ByVal lpTopLevelExceptionFilter As Long) As Long
Declare Function SystemTimeToTzSpecificLocalTime Lib "kernel32" Alias "SystemTimeToTzSpecificLocalTime" (lpTimeZoneInformation As TIME_ZONE_INFORMATION, lpUniversalTime As SYSTEMTIME, lpLocalTime As SYSTEMTIME) As Long
Declare Function WriteFileEx Lib "kernel32" Alias "WriteFileEx" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpOverlapped As OVERLAPPED, ByVal lpCompletionRoutine As Long) As Long

Type PIXELFORMATDESCRIPTOR
    nSize As Integer
    nVersion As Integer
    dwFlags As Long
    iPixelType As Byte
    cColorBits As Byte
    cRedBits As Byte
    cRedShift As Byte
    cGreenBits As Byte
    cGreenShift As Byte
    cBlueBits As Byte
    cBlueShift As Byte
    cAlphaBits As Byte
    cAlphaShift As Byte
    cAccumBits As Byte
    cAccumRedBits As Byte
    cAccumGreenBits As Byte
    cAccumBlueBits As Byte
    cAccumAlphaBits As Byte
    cDepthBits As Byte
    cStencilBits As Byte
    cAuxBuffers As Byte
    iLayerType As Byte
    bReserved As Byte
    dwLayerMask As Long
    dwVisibleMask As Long
    dwDamageMask As Long
End Type

Declare Function ChoosePixelFormat Lib "gdi32" Alias "ChoosePixelFormat" (ByVal hDC As Long, pPixelFormatDescriptor As PIXELFORMATDESCRIPTOR) As Long
Declare Function CreateDIBSection Lib "gdi32" Alias "CreateDIBSection" (ByVal hDC As Long, pBitmapInfo As BITMAPINFO, ByVal un As Long, ByVal lplpVoid As Long, ByVal handle As Long, ByVal dw As Long) As Long
Declare Function DescribePixelFormat Lib "gdi32" Alias "DescribePixelFormat" (ByVal hDC As Long, ByVal n As Long, ByVal un As Long, lpPixelFormatDescriptor As PIXELFORMATDESCRIPTOR) As Long
Declare Function EndDoc Lib "gdi32" Alias "EndDoc" (ByVal hDC As Long) As Long
Declare Function EnumFonts Lib "gdi32" Alias "EnumFontsA" (ByVal hDC As Long, ByVal lpsz As String, ByVal lpFontEnumProc As Long, ByVal lParam As Long) As Long
Declare Function EnumMetaFile Lib "gdi32" Alias "EnumMetaFile" (ByVal hDC As Long, ByVal hMetafile As Long, ByVal lpMFEnumProc As Long, ByVal lParam As Long) As Long
Declare Function EnumObjects Lib "gdi32" Alias "EnumObjects" (ByVal hDC As Long, ByVal n As Long, ByVal lpGOBJEnumProc As Long, lpVoid As Any) As Long

Declare Function FixBrushOrgEx Lib "gdi32" Alias "FixBrushOrgEx" (ByVal hDC As Long, ByVal n1 As Long, ByVal n2 As Long, lpPoint As POINTAPI) As Long
Declare Function GetBrushOrgEx Lib "gdi32" Alias "GetBrushOrgEx" (ByVal hDC As Long, lpPoint As POINTAPI) As Long
Declare Function GetDIBColorTable Lib "gdi32" Alias "GetDIBColorTable" (ByVal hDC As Long, ByVal un1 As Long, ByVal un2 As Long, pRGBQuad As RGBQUAD) As Long
Declare Function GetPixelFormat Lib "gdi32" Alias "GetPixelFormat" (ByVal hDC As Long) As Long
Declare Function LineDDA Lib "gdi32" Alias "LineDDA" (ByVal n1 As Long, ByVal n2 As Long, ByVal n3 As Long, ByVal n4 As Long, ByVal lpLineDDAProc As Long, ByVal lParam As Long) As Long

Declare Function SetAbortProc Lib "gdi32" Alias "SetAbortProc" (ByVal hDC As Long, ByVal lpAbortProc As Long) As Long
Declare Function SetDIBColorTable Lib "gdi32" Alias "SetDIBColorTable" (ByVal hDC As Long, ByVal un1 As Long, ByVal un2 As Long, pcRGBQuad As RGBQUAD) As Long
Declare Function SetPixelFormat Lib "gdi32" Alias "SetPixelFormat" (ByVal hDC As Long, ByVal n As Long, pcPixelFormatDescriptor As PIXELFORMATDESCRIPTOR) As Long
Declare Function SwapBuffers Lib "gdi32" Alias "SwapBuffers" (ByVal hDC As Long) As Long
Declare Function EnumCalendarInfo Lib "kernel32" Alias "EnumCalendarInfoA" (ByVal lpCalInfoEnumProc As Long, ByVal Locale As Long, ByVal Calendar As Long, ByVal CalType As Long) As Long
Declare Function GetCurrencyFormat Lib "kernel32" Alias "GetCurrencyFormatA" (ByVal Locale As Long, ByVal dwFlags As Long, ByVal lpValue As String, lpFormat As CURRENCYFMT, ByVal lpCurrencyStr As String, ByVal cchCurrency As Long) As Long
Declare Function GetNumberFormat Lib "kernel32" Alias "GetNumberFormatA" (ByVal Locale As Long, ByVal dwFlags As Long, ByVal lpValue As String, lpFormat As NUMBERFMT, ByVal lpNumberStr As String, ByVal cchNumber As Long) As Long
Declare Function GetStringTypeEx Lib "kernel32" Alias "GetStringTypeExA" (ByVal Locale As Long, ByVal dwInfoType As Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, lpCharType As Integer) As Long
Declare Function GetStringTypeW Lib "kernel32" Alias "GetStringTypeW" (ByVal dwInfoType As Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, lpCharType As Integer) As Long
Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long

Declare Function DeletePrinter Lib "winspool.drv" Alias "DeletePrinter" (ByVal hPrinter As Long) As Long

Declare Function FindClosePrinterChangeNotification Lib "winspool.drv" Alias "FindClosePrinterChangeNotification" (ByVal hChange As Long) As Long
Declare Function FindFirstPrinterChangeNotification Lib "winspool.drv" Alias "FindFirstPrinterChangeNotification" (ByVal hPrinter As Long, ByVal fdwFlags As Long, ByVal fdwOptions As Long, ByVal pPrinterNotifyOptions As String) As Long
Declare Function FindNextPrinterChangeNotification Lib "winspool.drv" Alias "FindNextPrinterChangeNotification" (ByVal hChange As Long, pdwChange As Long, ByVal pvReserved As String, ByVal ppPrinterNotifyInfo As Long) As Long
Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As Long, pcbNeeded As Long) As Long
Declare Function SetPrinter Lib "winspool.drv" Alias "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Byte, ByVal Command As Long) As Long

Declare Function BroadcastSystemMessage Lib "user32" Alias "BroadcastSystemMessage" (ByVal dw As Long, pdw As Long, ByVal un As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function CascadeWindows Lib "user32" Alias "CascadeWindows" (ByVal hwndParent As Long, ByVal wHow As Long, ByVal lpRect As RECT, ByVal cKids As Long, lpkids As Long) As Integer
Declare Function ChangeMenu Lib "user32" Alias "ChangeMenuA" (ByVal hMenu As Long, ByVal cmd As Long, ByVal lpszNewItem As String, ByVal cmdInsert As Long, ByVal flags As Long) As Long
Declare Function CheckMenuRadioItem Lib "user32" Alias "CheckMenuRadioItem" (ByVal hMenu As Long, ByVal un1 As Long, ByVal un2 As Long, ByVal un3 As Long, ByVal un4 As Long) As Long
Declare Function ChildWindowFromPoint Lib "user32" Alias "ChildWindowFromPoint" (ByVal hWndParent As Long, ByVal pt As POINTAPI) As Long
Declare Function ChildWindowFromPointEx Lib "user32" Alias "ChildWindowFromPointEx" (ByVal hWnd As Long, ByVal pt As POINTAPI, ByVal un As Long) As Long
Declare Function CloseDesktop Lib "user32" Alias "CloseDesktop" (ByVal hDesktop As Long) As Long
Declare Function CloseWindowStation Lib "user32" Alias "CloseWindowStation" (ByVal hWinSta As Long) As Long

Declare Function CopyImage Lib "user32" Alias "CopyImage" (ByVal handle As Long, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
Declare Function CreateDesktop Lib "user32" Alias "CreateDesktopA" (ByVal lpszDesktop As String, ByVal lpszDevice As String, pDevmode As DEVMODE, ByVal dwFlags As Long, ByVal dwDesiredAccess As Long, lpsa As SECURITY_ATTRIBUTES) As Long
Declare Function CreateDialogIndirectParam Lib "user32" Alias "CreateDialogIndirectParamA" (ByVal hInstance As Long, lpTemplate As DLGTEMPLATE, ByVal hWndParent As Long, ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Long
Declare Function CreateDialogParam Lib "user32" Alias "CreateDialogParamA" (ByVal hInstance As Long, ByVal lpName As String, ByVal hWndParent As Long, ByVal lpDialogFunc As Long, ByVal lParamInit As Long) As Long
Declare Function CreateIconFromResource Lib "user32" Alias "CreateIconFromResource" (presbits As Byte, ByVal dwResSize As Long, ByVal fIcon As Long, ByVal dwVer As Long) As Long

Declare Function DialogBoxIndirectParam Lib "user32" Alias "DialogBoxIndirectParamA" (ByVal hInstance As Long, hDialogTemplate As DLGTEMPLATE, ByVal hWndParent As Long, ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Long

Declare Function DragDetect Lib "user32" Alias "DragDetect" (ByVal hWnd As Long, ByVal pt As POINTAPI) As Long
Declare Function DragObject Lib "user32" Alias "DragObject" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal un As Long, ByVal dw As Long, ByVal hCursor As Long) As Long
Declare Function DrawAnimatedRects Lib "user32" Alias "DrawAnimatedRects" (ByVal hwnd As Long, ByVal idAni As Long, lprcFrom As Rect, lprcTo As Rect) As Long
Declare Function DrawCaption Lib "user32" Alias "DrawCaption" (ByVal hWnd As Long, ByVal hDC As Long, pcRect As Rect, ByVal un As Long) As Long
Declare Function DrawEdge Lib "user32" Alias "DrawEdge" (ByVal hdc As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Long
Declare Function DrawFrameControl Lib "user32" Alias "DrawFrameControl" (ByVal hDC As Long, lpRect As RECT, ByVal un1 As Long, ByVal un2 As Long) As Long
Declare Function DrawIconEx Lib "user32" Alias "DrawIconEx" (ByVal hdc As Long, ByVal xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
Declare Function DrawState Lib "user32" Alias "DrawStateA" (ByVal hDC As Long, ByVal hBrush As Long, ByVal lpDrawStateProc As Long, ByVal lParam As Long, ByVal wParam As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal n3 As Long, ByVal n4 As Long, ByVal un As Long) As Long

Type DRAWTEXTPARAMS
	cbSize As Long
	iTabLength As Long
	iLeftMargin As Long
	iRightMargin As Long
	uiLengthDrawn As Long
End Type

Declare Function DrawTextEx Lib "user32" Alias "DrawTextExA" (ByVal hDC As Long, ByVal lpsz As String, ByVal n As Long, lpRect As RECT, ByVal un As Long, lpDrawTextParams As DRAWTEXTPARAMS) As Long
Declare Function EnumChildWindows Lib "user32" Alias "EnumChildWindows" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function EnumDesktops Lib "user32" Alias "EnumDesktopsA" (ByVal hwinsta As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function EnumDesktopWindows Lib "user32" Alias "EnumDesktopWindows" (ByVal hDesktop As Long, ByVal lpfn As Long, ByVal lParam As Long) As Long
Declare Function EnumPropsEx Lib "user32" Alias "EnumPropsExA" (ByVal hWnd As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function EnumProps Lib "user32" Alias "EnumPropsA" (ByVal hWnd As Long, ByVal lpEnumFunc As Long) As Long
Declare Function EnumThreadWindows Lib "user32" Alias "EnumThreadWindows" (ByVal dwThreadId As Long, ByVal lpfn As Long, ByVal lParam As Long) As Long
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function EnumWindowStations Lib "user32" Alias "EnumWindowStationsA" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Declare Function GetKeyboardLayoutList Lib "user32" Alias "GetKeyboardLayoutList" (ByVal nBuff As Long, lpList As Long) As Long
Declare Function GetKeyboardLayout Lib "user32" Alias "GetKeyboardLayout" (ByVal dwLayout As Long) As Long
Declare Function GetMenuContextHelpId Lib "user32" Alias "GetMenuContextHelpId" (ByVal hMenu As Long) As Long
Declare Function GetMenuDefaultItem Lib "user32" Alias "GetMenuDefaultItem" (ByVal hMenu As Long, ByVal fByPos As Long, ByVal gmdiFlags As Long) As Long

Type MENUITEMINFO
    cbSize As Long
    fMask As Long
    fType As Long
    fState As Long
    wID As Long
    hSubMenu As Long
    hbmpChecked As Long
    hbmpUnchecked As Long
    dwItemData As Long
    dwTypeData As String
    cch As Long
End Type

Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Long, lpMenuItemInfo As MENUITEMINFO) As Long
Declare Function GetMenuItemRect Lib "user32" Alias "GetMenuItemRect" (ByVal hWnd As Long, ByVal hMenu As Long, ByVal uItem As Long, lprcItem As RECT) As Long

Type SCROLLINFO
	cbSize As Long
	fMask As Long
	nMin As Long
	nMax As Long
	nPage As Long
	nPos As Long
	nTrackPos As Long
End Type

Declare Function GetScrollInfo Lib "user32" Alias "GetScrollInfo" (ByVal hWnd As Long, ByVal n As Long, lpScrollInfo As SCROLLINFO) As Long
Declare Function GetSysColorBrush Lib "user32" Alias "GetSysColorBrush" (ByVal nIndex As Long) As Long
Declare Function GetUserObjectInformation Lib "user32" Alias "GetUserObjectInformationA" (ByVal hObj As Long, ByVal nIndex As Long, pvInfo As Any, ByVal nLength As Long, lpnLengthNeeded As Long) As Long
Declare Function GetWindowContextHelpId Lib "user32" Alias "GetWindowContextHelpId" (ByVal hWnd As Long) As Long
Declare Function GetWindowRgn Lib "user32" Alias "GetWindowRgn" (ByVal hWnd As Long, ByVal hRgn As Long) As Long
Declare Function GrayString Lib "user32" Alias "GrayStringA" (ByVal hDC As Long, ByVal hBrush As Long, ByVal lpOutputFunc As Long, ByVal lpData As Long, ByVal nCount As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Declare Function InsertMenuItem Lib "user32" Alias "InsertMenuItemA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, ByRef lpcMenuItemInfo As MENUITEMINFO) As Long
Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
Declare Function LookupIconIdFromDirectoryEx Lib "user32" Alias "LookupIconIdFromDirectoryEx" (presbits As Byte, ByVal fIcon As Boolean, ByVal cxDesired As Long, ByVal cyDesired As Long, ByVal Flags As Long) As Long
Declare Function MapVirtualKeyEx Lib "user32" Alias "MapVirtualKeyExA" (ByVal uCode As Long, ByVal uMapType As Long, ByVal dwhkl As Long) As Long
Declare Function MenuItemFromPoint Lib "user32" Alias "MenuItemFromPoint" (ByVal hWnd As Long, ByVal hMenu As Long, ByVal ptScreen As POINTAPI) As Long

Type MSGBOXPARAMS
	cbSize As Long
	hwndOwner As Long
	hInstance As Long
	lpszText As String
	lpszCaption As String
	dwStyle As Long
	lpszIcon As String
	dwContextHelpId As Long
	lpfnMsgBoxCallback As Long
	dwLanguageId As Long
End Type

Declare Function MessageBoxIndirect Lib "user32" Alias "MessageBoxIndirectA" (lpMsgBoxParams As MSGBOXPARAMS) As Long
Declare Function OpenDesktop Lib "user32" Alias "OpenDesktopA" (ByVal lpszDesktop As String, ByVal dwFlags As Long, ByVal fInherit As Boolean, ByVal dwDesiredAccess As Long) As Long
Declare Function OpenInputDesktop Lib "user32" Alias "OpenInputDesktop" (ByVal dwFlags As Long, ByVal fInherit As Boolean, ByVal dwDesiredAccess As Long) As Long
Declare Function OpenWindowStation Lib "user32" Alias "OpenWindowStationA" (ByVal lpszWinSta As String, ByVal fInherit As Boolean, ByVal dwDesiredAccess As Long) As Long
Declare Function PaintDesktop Lib "user32" Alias "PaintDesktop" (ByVal hdc As Long) As Long

Type WNDCLASSEX
    cbSize As Long
    style As Long
    lpfnWndProc As Long
    cbClsExtra As Long
    cbWndExtra As Long
    hInstance As Long
    hIcon As Long
    hCursor As Long
    hbrBackground As Long
    lpszMenuName As String
    lpszClassName As String
    hIconSm As Long
End Type

Declare Function RegisterClassEx Lib "user32" Alias "RegisterClassExA" (pcWndClassEx As WNDCLASSEX) As Integer
Declare Function SetMenuContextHelpId Lib "user32" Alias "SetMenuContextHelpId" (ByVal hMenu As Long, ByVal dw As Long) As Long
Declare Function SetMenuDefaultItem Lib "user32" Alias "SetMenuDefaultItem" (ByVal hMenu As Long, ByVal uItem As Long, ByVal fByPos As Long) As Long
Declare Function SetMenuItemInfo Lib "user32" Alias "SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, lpcMenuItemInfo As MENUITEMINFO) As Long
Declare Function SetMessageExtraInfo Lib "user32" Alias "SetMessageExtraInfo" (ByVal lParam As Long) As Long
Declare Function SetMessageQueue Lib "user32" Alias "SetMessageQueue" (ByVal cMessagesMax As Long) As Long
Declare Function SetProcessWindowStation Lib "user32" Alias "SetProcessWindowStation" (ByVal hWinSta As Long) As Long
Declare Function SetScrollInfo Lib "user32" Alias "SetScrollInfo" (ByVal hWnd As Long, ByVal n As Long, lpcScrollInfo As SCROLLINFO, ByVal bool As Boolean) As Long
Declare Function SetSystemCursor Lib "user32" Alias "SetSystemCursor" (ByVal hcur As Long, ByVal id As Long) As Long
Declare Function SetThreadDesktop Lib "user32" Alias "SetThreadDesktop" (ByVal hDesktop As Long) As Long
Declare Function SetTimer Lib "user32" Alias "SetTimer" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function SetUserObjectInformation Lib "user32" Alias "SetUserObjectInformationA" (ByVal hObj As Long, ByVal nIndex As Long, pvInfo As Any, ByVal nLength As Long) As Long
Declare Function SetWindowContextHelpId Lib "user32" Alias "SetWindowContextHelpId" (ByVal hWnd As Long, ByVal dw As Long) As Long
Declare Function SetWindowRgn Lib "user32" Alias "SetWindowRgn" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Declare Function SetWindowsHook Lib "user32" Alias "SetWindowsHookA" (ByVal nFilterType As Long, ByVal pfnFilterProc As Long) As Long
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function ShowWindowAsync Lib "user32" Alias "ShowWindowAsync" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Declare Function SwitchDesktop Lib "user32" Alias "SwitchDesktop" (ByVal hDesktop As Long) As Long
Declare Function TileWindows Lib "user32" Alias "TileWindows" (ByVal hwndParent As Long, ByVal wHow As Long, lpRect As Rect, ByVal cKids As Long, lpKids As Long) As Integer
Declare Function ToAsciiEx Lib "user32" Alias "ToAsciiEx" (ByVal uVirtKey As Long, ByVal uScanCode As Long, lpKeyState As Byte, lpChar As Integer, ByVal uFlags As Long, ByVal dwhkl As Long) As Long

Type TPMPARAMS
    cbSize As Long
    rcExclude As Rect
End Type

Declare Function TrackPopupMenuEx Lib "user32" Alias "TrackPopupMenuEx" (ByVal hMenu As Long, ByVal un As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal hWnd As Long, lpTPMParams As TPMPARAMS) As Long
Declare Function UnhookWindowsHook Lib "user32" Alias "UnhookWindowsHook" (ByVal nCode As Long, ByVal pfnFilterProc As Long) As Long
Declare Function VkKeyScanEx Lib "user32" Alias "VkKeyScanExA" (ByVal ch As Byte, ByVal dwhkl As Long) As Integer
Declare Function WNetGetUniversalName Lib "mpr" Alias "WNetGetUniversalNameA" (ByVal lpLocalPath As String, ByVal dwInfoLevel As Long, lpBuffer As Any, lpBufferSize As Long) As Long

Const INVALID_HANDLE_VALUE = -1

' Constantes de DrawEdge
Const BDR_RAISEDOUTER = &H1
Const BDR_SUNKENOUTER = &H2
Const BDR_RAISEDINNER = &H4
Const BDR_SUNKENINNER = &H8

Const BDR_OUTER = &H3
Const BDR_INNER = &HC
Const BDR_RAISED = &H5
Const BDR_SUNKEN = &HA

Const EDGE_RAISED = (BDR_RAISEDOUTER Or BDR_RAISEDINNER)
Const EDGE_SUNKEN = (BDR_SUNKENOUTER Or BDR_SUNKENINNER)
Const EDGE_ETCHED = (BDR_SUNKENOUTER Or BDR_RAISEDINNER)
Const EDGE_BUMP = (BDR_RAISEDOUTER Or BDR_SUNKENINNER)

Const BF_LEFT = &H1
Const BF_TOP = &H2
Const BF_RIGHT = &H4
Const BF_BOTTOM = &H8

Const BF_TOPLEFT = (BF_TOP Or BF_LEFT)
Const BF_TOPRIGHT = (BF_TOP Or BF_RIGHT)
Const BF_BOTTOMLEFT = (BF_BOTTOM Or BF_LEFT)
Const BF_BOTTOMRIGHT = (BF_BOTTOM Or BF_RIGHT)
Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)

Const BF_DIAGONAL = &H10

' Para lneas diagonales, los indicadores BF_RECT especifican el punto final del
' vector enlazado por el parmetro de rectngulo.
Const BF_DIAGONAL_ENDTOPRIGHT = (BF_DIAGONAL Or BF_TOP Or BF_RIGHT)
Const BF_DIAGONAL_ENDTOPLEFT = (BF_DIAGONAL Or BF_TOP Or BF_LEFT)
Const BF_DIAGONAL_ENDBOTTOMLEFT = (BF_DIAGONAL Or BF_BOTTOM Or BF_LEFT)
Const BF_DIAGONAL_ENDBOTTOMRIGHT = (BF_DIAGONAL Or BF_BOTTOM Or BF_RIGHT)

Const BF_MIDDLE = &H800    ' Llena en el centro.
Const BF_SOFT = &H1000     ' Se usa para botones ms blandos.
Const BF_ADJUST = &H2000   ' Calcula el espacio que hay a la izquierda.
Const BF_FLAT = &H4000     ' Para bordes planos, no 3D.
Const BF_MONO = &H8000     ' Para bordes monocromos.

